蓝桥·训练 正则问题 二叉树
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入格式
一个由x()|组成的正则表达式。
输出格式
输出所给正则表达式能接受的最长字符串的长度。
数据范围
输入长度不超过100,保证合法。
输入样例:
((xx|xxx)x|(x|xx))xx
输出样例:
6
之前看题不太理解,结果就是|运算,比如xx|xxx就是3个x,取最大的,括号只是改变运算的先后。
#include<iostream>
using namespace std;
int k;
string str; int dfs()
{
int res=0; while(k<str.size())
{
if(str[k]=='(')
{
k++;//代表跳过这个点
res+=dfs();
k++;
}
else if(str[k]=='|')
{
k++;
res=max(dfs(),res);
}
else if(str[k]==')') break;//如果这里加k++那么就不能正确的返回根节点了。 else{
//str[k]是x的情况
k++;
res++;
}
}
return res;
}
int main()
{
cin>>str;
cout<<dfs()<<endl;
return 0;
}