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

发布时间 2023-03-27 19:42:45作者: xiazichengxi

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

class Solution {
public:
    using size = string::size_type;
    string removeDuplicates(string s) {
        size len = s.size();
        std::stack<char> sta;
        for (size i = 0; i != len; i++)
        {
            if (!sta.empty())
            {
                char tmp = sta.top();
                if (tmp == s[i])
                {
                    sta.pop();
                    continue;
                }
            }
            sta.push(s[i]);
        }
        string res;
        while (!sta.empty()) { // 将栈中元素放到result字符串汇总
            res += sta.top();
            sta.pop();
        }
        std::reverse(res.begin(), res.end()); // 此时字符串需要反转一下
        return res;
    }
    string removeDuplicates1(string s) {
        size len = s.size();
        for (size i = 0; i != len;)
        {
            if (i >= 1 && s[i] == s[i - 1])
            {
                s.erase(i - 1,1);
                s.erase(i - 1,1);
                len = s.size();
                i--;
            }
            else {
                i++;
            }
        }
        return s;
    }
};