解题思路:
用栈模拟,创建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;
}
知识点:
模拟