似乎是爆栈了
我用的栈,没用递归,一番操作点击编译运行结果爆栈……
#include<bits/stdc++.h>
using namespace std;
char ch;//记录每一位的东西
string s;//字符串记录序列
int a,l,op,r,p[200];//分别表示连续a的个数,一个数,操作符,一个数和把符号转为数的数组。(l,r的作用不定)
stack<int>s1;//栈
int main(){
p['(']=-1,p['|']=0;//预处理,将符号转为某个数
cin>>s;//读入
int len=s.size();//方便使用
for (int i=0;i<len;i++){
ch=s[i];
if (ch=='a') a++;//当有字符a读入时a++
if (ch=='('||ch=='|'){
s1.push(a);
a=0;
s1.push(p[ch]);
}//如果读入(或|则先将a压进栈并使a=0,再把操作符压进栈)
if (ch==')'){
r=s1.top();s1.pop();//得到r
op=s1.top();s1.pop();//得到操作符
if (op==-1){//操作符是(
if (s1.size()&&s1.top()>0){//看栈是否为空且当前栈顶是否有数,比如aa(aa)结果为aaaa
l=s1.top();s1.pop();//得到l
s1.push(l+r);//则把l+r的结果压进栈
}
else s1.push(r);如果没有数,则直接将a放进栈,比如(aa)结果为aa
}
else{//操作符是|
l=s1.top();//得到l
s1.push(max(l,r));//将两数最大值放进栈
}
}
}
printf("%d\n",s1.top());//最后的结果即为栈顶元素
return 0;
}