一个关于括号能否删除的很有意思的题
#include<bits/stdc++.h>
using namespace std;
int level[1000007];
int main(){
string s;
stack<int> stack;
memset(level,0,sizeof(level));
level['+']=1;
level['-']=2;
level['*']=3;
level['/']=4;
cin>>s;
for(int i=0;i<s.length();i++){
int minyunsuanji=5;
if(s[i]=='('||s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
stack.push(i);
}
else if(s[i]==')'){
while(s[stack.top()]!='('){
minyunsuanji=min(minyunsuanji,level[s[stack.top()]]);
stack.pop();
}
int before=-1,after=-1;
if(i+1<s.length()&&s[i+1]!=')'){
after=level[s[i+1]];
}
if(stack.top()-1>=0 && s[stack.top()-1]!='('){
before=level[s[stack.top()-1]];
}
if(minyunsuanji>=after&&minyunsuanji>=before){
s[i]=s[stack.top()]=0;
}
if((minyunsuanji==1&&after==2&&before<2)||(minyunsuanji==3&&after==4&& before<4)){
s[i]=s[stack.top()]=1;
}
}
}
for(int i=0;i<s.length();i++){
if(s[i]==' ') continue;
cout<<s[i];
}
return 0;
}