题目描述:
输入一连串的字符串取出相邻的重复项,注意:消除之后的重复项也要删除
示例:
输入:"abbaca" 输出:"ca" 解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。 之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
综合解法(js实现):
解法一(通过使用JS模拟实现的Stack栈来实现):
const Stack=(function(){ var items=[]; class Stack{ constructor(){} //进栈 push(el){ items.push(el); } //查看栈顶数据 peek(){ return items[item.length-1]; } //出栈 pop(){ items.pop(); } //判断长度 size(){ return items.length; } //清空 clear(){ items=[]; } //输出全部元素 print(){ return items.toString(); } } })(); //需要处理的字符串 var str=abccbadr; var stack_instance=new Stack(); for(let i=0;i<str.length;i++){ if(stack_instance.size===0){ stack_instance.push(str[i]); }else{ if(stack_instance.peek()==str[i]){ stack_instance.pop(); }else{ stack_instance.push(sta[i]); } } }
解法二(也是通过栈的思想直接使用数组实现不需要模拟):
主要学习解法一,这种数组解法简单就不写了,自由发回吧!
总结:由问题分析可得每次如果有相同的话删除之后还需要获得之前的字母数据,等价于越靠后的越先比较;这个特点和栈的数据处理很一样,
所以通过模仿栈来处理再好不过了;处理很简单关键在于思想,把握住思想一类问题就迎刃而解。
一步一个脚印!!!继续加油
原文:https://www.cnblogs.com/gamecc666/p/14591519.html