• 逆向遍历整个输入字符串( 从右到左遍历输入字符串);
    • 通过使用栈(stack)管理每一个遍历的字符:
    • 如果:栈顶元素与当前字符相同,则弹出栈(移除字符);
    • 否则:将当前字符压入栈中;
    • 遍历完成后,检查栈空:
    • 如果:栈空,直接输出 “0” 结束;
    • 否则:直接将栈的内容按序输出即可(因为前面已经是逆向入栈,可以保证顺序出栈)。

    • 复杂度分析:
    • 时间O(n):遍历
    • 空间O(n):输入串长度,栈最坏保存所有字符

    #include<iostream>
    #include<stack>
    using namespace std;
    
    
    int main() {
        string s;
        while (cin >> s) {
            stack<char> stack;
            // 逆向遍历整个输入字符串:这样在输出的时候可以直接输出而无需重组字符串;
            for (auto it = s.rbegin(); it != s.rend(); it++) {
                if (!stack.empty() && *it == stack.top()) stack.pop();
                else stack.push(*it);
            }
            // 处理最后是空的情况,需要输出 “0”
            if (stack.empty()) {
                cout << "0" << endl;
                continue;
            }
            // 直接出栈输出结果
            while (!stack.empty()) {
                cout << stack.top();
                stack.pop();
            }
            cout << endl;
        }
        return 0;
    }