栈-1047.删除字符串中的所有相邻重复项-力扣(LeetCode)
一、题目解析
1、反复执行重复项删除操作
2、s仅由小写英文字母组成
二、算法原理
该题并不难,难的是能不能想到用栈这个数据结构解题
解法:栈模拟
横着看起来不好理解,我们把它竖起来,是不是和消消乐很类似,两两消去,上的会往下掉;这样的结构很难不往栈方面去想
但是我们没有必要使用库里的栈,第一点,栈中存储的是字符,我们得到最终结果之前,还需要把栈内的元素还原成字符串;第二点在我们早期学习时,或许不少读者都用c实现过链表、栈和队列,这样简单的数据结构,简单的栈是可以用数组模拟的,由于需要返回string,所以这里可以使用string来模拟栈的功能
当即将加入ret的元素与ret末尾元素相同,根据重复项删除,我们ret.pop_back(),进行尾删操作
有需要的可以自行查询相关语法细节
链接:cplusplus.com - The C++ Resources Network
三、代码示例
class Solution {
public:string removeDuplicates(string s){string ret;for(int i = 0;i<s.size();i++){if(ret.size()>0&&ret[ret.size()-1] == s[i])ret.pop_back();else ret += s[i];}return ret;}
};