算法day31 删除字符串中的所有相邻重复项
题目描述

思路:单栈
对于出现的字符串相邻项除去问题,我们可以通过将整个字符串入栈,然后在入栈的过程中设置一个缓存位ch,ch用来存储栈顶的上一位元素。再每一次压栈后,我们令二者进行比较,若相同,则使当前栈顶及其上一位元素出栈,随后更新ch的值,直至整个字符串长度的循环结束。此时我们再将剩余的元素全部出栈,收集出栈的元素并反转后返回,即可完成。
代码如下
public:
stack<char> Stack;
string removeDuplicates(string s) {
vector<char> res;
char ch;
int len = s.size();
Stack.push(s[0]);
ch = s[0];
for(int i=1;i<len;i++){
Stack.push(s[i]);
if(s[i] == ch && Stack.size() > 1){
Stack.pop();
Stack.pop();
if(!Stack.empty()){
ch = Stack.top();
}
}else{
ch = s[i];
}
}
while(!Stack.empty()){
res.push_back(Stack.top());
Stack.pop();
}
reverse(res.begin(),res.end());
return string(res.begin(),res.end());
}
时间复杂度:O(n)
空间复杂度:O(n)
END
浙公网安备 33010602011771号