解题思路:
用栈模拟,创建2个栈,a:字符串的栈,栈顶为s末尾;q:答案栈,与a顶元素互动做相应操作。
陷入的误区:认为可以两个方向可以随意消,但不同方向消得到的结果不同,正确其实是右边为第一个冒的泡,依次冒泡,从右往左去消泡。
AC代码:
#include <bits/stdc++.h>
using namespace std;
stack<char> q;
stack<char> a;vector<char> ans;
int main()
{string s;cin >> s;for(int i = s.length() - 1; i >= 0; i--)a.push(s[i]);while(!a.empty()){char x = a.top();a.pop();if(q.empty())q.push(x);else {char y = q.top();if(y == 'o' && x == 'o'){q.pop();a.push('O');}else if(y == 'O' && x == 'O'){q.pop();}else q.push(x);}}if(q.empty())cout<<"Empty"<<endl;else{while(!q.empty()){ans.push_back(q.top());q.pop();}for(int i = ans.size() - 1; i >= 0; i--){cout << ans[i];}}return 0;
}
知识点:
模拟