1 solutions
-
1
很俗的stack训练题
难点在于左括号的如何判断多余以及多个输入
#include<bits/stdc++.h> using namespace std; string a; int main(){ while(1){ getline(cin,a);//取整行 if(a=="") break;//没有就结束程序 string ans=""; for(int i=0;i<a.size();i++) ans+='$'; //开头直接赋 $ 不用判断多余左括号 stack<char> s;//记录括号 stack<int> sn;//记录左括号下标 for(int i=0;i<a.size();i++){ if(a[i]!='('&&a[i]!=')') ans[i]=' '; //不是括号就跳过 if(a[i]=='('){ s.push('(');//左括号入栈 sn.push(i);//下标入栈 } if(a[i]==')'){ //是右括号就判断是否多余 if(!s.empty()){//这个判断很重要!! if(s.top()=='('){//有对应的左括号 ans[sn.top()]=' '; ans[i]=' '; //记录为正常 s.pop(),sn.pop();//别忘了 } else ans[i]='?';//没有对应的就多余 }else ans[i]='?';//啥括号没有也是多余 } } cout<<a<<"\n"; cout<<ans<<"\n"; } return 0; }
- 1
Information
- ID
- 689
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 6
- Accepted
- 3
- Uploaded By