核心
没什么核心,其实就是括号匹配的板子题,基本上一模一样;
注意的地方,例如以下代码
if(!s.empty()&&s.top()=='O')
如果把!s.empty()放到&&后面那么编译的时候会出问题,所以栈的非空判断要放在前面;
处理完之后呢,栈中保存的结果是正确的,但是栈的特点是后进先出,所以需要一个字符数组来存栈的内容,然后在逆序输出;
int num=0; while(!s.empty()){ c[num]=s.top(); s.pop(); num++; } for(int i=num-1;i>=0;i--)cout<<c[i]; cout<<endl; }
就这些注意事项吧;
贴上ac代码
#include<iostream> #include<algorithm> #include<stack> #include<string> using namespace std; char c[1000]; stack<char>s; int main(){ std::ios::sync_with_stdio(false); string x; while(cin>>x){ for(int i=0;i<x.length();i++) { if(s.empty()){ s.push(x[i]); continue; } if(x[i]!=s.top()){ s.push(x[i]); continue; }else{ if(x[i]=='O')s.pop(); else { s.pop(); if(!s.empty()&&s.top()=='O')s.pop(); else s.push('O'); } } } int num=0; while(!s.empty()){ c[num]=s.top(); s.pop(); num++; } for(int i=num-1;i>=0;i--)cout<<c[i]; cout<<endl; } return 0; }