题目描述:
考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6
输入: ((xx|xxx)x|(x|xx))xx
程序应该输出: 6
思路:
遇到 '(' 就递归调用函数, 遇到 'a' 就将计数器x++,遇到 '|'就选出左右最大值,并将计数器置为0, 遇到 ')' 就停止,返回相邻 '(' ')' 中的最大值。
代码:
#include<bits/stdc++.h>
using namespace std;
int Fun(){
char data;
int x=0,y=0;
while(1){
data=getchar();
if (data=='a') x++;
else if (data=='|') {
y=max(x,y);
x=0;
}
else if (data=='(')
x+=Fun();
else {
y=max(x,y);
return y;
}
}
}
int main(){
int ans=Fun();
cout<<ans<<endl;
}