题目要求
题目描述
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出
这个正则表达式能接受的最长字符串的长度。
样例输入
((xx|xxx)x|(x|xx))xx
样例输出
6
代码
#include<iostream> #include<string> #include<algorithm> using namespace std; string s; int p=0; int len=0; //字符串的长度 int dfs(){ int m=0; //最大值 int tmp=0; //临时存放结果 while(p<len){ if(s[p]=='('){ p++; tmp+=dfs(); //等待后面的结果并累加到tmp中 }else if(s[p]=='x'){ p++; tmp++; }else if(s[p]=='|'){ p++; m=max(m,tmp); tmp=0; }else if(s[p]==')'){ p++; m=max(m,tmp); return m; } } m=max(m,tmp); return m; } int main(){ cin>>s; len=s.length(); int ans = dfs(); cout<<ans; return 0; }