算法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

posted on 2025-05-17 09:30  sakura430  阅读(11)  评论(0)    收藏  举报