1047. 删除字符串中的所有相邻重复项

原题链接:1047. 删除字符串中的所有相邻重复项

思路:
只需要删除相邻又相同的字符就行了
那么只需要运用一个栈来存储当前需要进行匹配的元素
遍历字符串的字符
字符和栈顶的元素不相等时,就代表不是相邻且相同的 需要删除字符
那么将这个字符压入栈中进行存储
如果当前遍历的字符和栈顶元素相等时,就代表是相邻且相同的 需要删除字符
那么将这个栈顶弹出,就代表删除了相邻的的字符重复项

全代码:

class Solution {
public:
    string removeDuplicates(string s) {
        stack<char> stack_op;
        for(int i = 0; i < s.size(); i++)
        {//遍历字符串
            if(stack_op.empty() || stack_op.top() != s[i])
            {//如果栈为空,或者栈顶元素不等于s[i],则代表不是重复匹配项。将s[i]压入栈
                stack_op.push(s[i]);
            }
            else
            {//栈不为空的情况下,栈顶元素 == s[i],代表为需要删除的重复项,此时栈顶弹出
                stack_op.pop();
            }
        }

        s = "";//重置字符串
        while(!stack_op.empty())
        {//将栈中的元素逐个压入字符串内,但是要注意,压入后字符串和正确答案互为倒序
            s += stack_op.top();
            stack_op.pop();
        }
        //反转下字符串,则为正确答案
        reverse(s.begin(),s.end());
        return s;
    }
};

你可能感兴趣的:(算法,数据结构)