问题描述
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入格式
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出格式
这个正则表达式能接受的最长字符串的长度。
样例输入
((xx|xxx)x|(x|xx))xx
样例输出
6
数据规模和约定
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
思路:函数的迭代思想,每个()算一层,每次给出最大的数值
可是提交后发现居然有2个测试点超时???下载了测试点数据发现,最后两个测试点的()并不是有 '(' 就有 ')' ,可能存在最外面那层只有一个 '(' ,果然是坑,稍微改一下程序就可以了.
#include<stdio.h>
#include<iostream>
#include<string>
#include<list>
#include<math.h>
using namespace std;
bool key=0;
int sam(){
int a=0,b=0;
char c;
while(1){
c=getchar();
if(c=='\n'||c=='\r'){
key=1;
return max(a,b);
}
if(c=='x')
b++;
else if(c=='|'){
a=max(a,b);
b=0;
}
else if(c=='('){
b+=sam();
if(key==1)
return max(a,b);
}
else if(c==')')
return max(a,b);
else
return max(a,b);
}
}
int main(){
int result;
result=sam();
printf("%d",result);
return 0;
}