表达式中只含有‘1‘-‘9‘,‘+’,‘-’,‘(’,‘)’,空格这些字符
class Solution {
public:
int calculate(string s) {
int fast=0;
int slow=0;
int size=s.length();
while(fast<size){
if(s[fast]!=' ')
s[slow++]=s[fast];
++fast;
}
stack<char> st;
vector<char> res;
for(auto &e:s){
if(e==')'){
while(!st.empty()&&st.top()!='('){
res.push_back(st.top());
st.pop();
}
st.pop();
}else if(e=='('){
st.push(e);
}else if(e=='+'||e=='-'){
while(!st.empty()&&st.top()!='('){
res.push_back(st.top());
st.pop();
}
st.push(e);
}else{
res.push_back(e);
}
}
while(!st.empty()){
res.push_back(st.top());
st.pop();
}
stack<int> st1;
for(auto &e:res){
if(e>='0'&&e<='9'){
st1.push(e-'0');
continue;
}
int temp1=st1.top();
st1.pop();
int temp2=st1.top();
st1.pop();
if(e=='+')
st1.push(temp2+temp1);
if(e=='-')
st1.push(temp2-temp1);
}
return st1.top();
}
};