0
点赞
收藏
分享

微信扫一扫

1225. 正则问题(递归)


1225. 正则问题

考虑一种简单的正则表达式:

只由 x ( ) | 组成的正则表达式。

小明想求出这个正则表达式能接受的最长字符串的长度。

例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。

输入格式
一个由x()|组成的正则表达式。

输出格式
输出所给正则表达式能接受的最长字符串的长度。

数据范围
输入长度不超过100,保证合法。

输入样例:
((xx|xxx)x|(x|xx))xx
输出样例:
6
题解
X 表示字符
| 表示左右两边都可以,选择一个
递归就是树
对应成一颗树。

s = input().strip()
k = 0

def dfs():
global k
res = 0
while k < len(s):
if s[k] == '(':
k += 1
res += dfs()
k += 1
elif s[k] == '|':
k += 1
res = max(dfs(), res)
elif s[k] == ')':
break
elif s[k] == 'x':
res += 1
k += 1

return res
print(dfs())

#include <cstring>
#include <iostream>
#include <algorithm>

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(res, dfs());
}
else if (str[k] == ')') break;
else
{
k ++ ; // 跳过 'x'
res ++ ;
}
}

return res;
}

int main()
{
cin >> str;
cout << dfs() << endl;

return 0;
}


举报

相关推荐

0 条评论