题目描述
考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6
输入
输入一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出
输出这个正则表达式能接受的最长字符串的长度。
样例输入
((xx|xxx)x|(x|xx))xx
样例输出
6
代码如下:
#include <iostream>
using namespace std;
#include <cstring>
string s;
int pos = 0;int dfs() {int temp = 0, ans = 0;int len = s.size();while (pos < len) {if (s[pos] == '(') {pos++;temp = temp + dfs();} else if (s[pos] == ')') {pos++;break;} else if (s[pos] == '|') {pos++;ans = max(ans, temp);temp = 0;} else {pos++;temp++;}}ans = max(ans, temp);return ans;
}int main() {cin >> s;cout << dfs() << endl;return 0;
}