题目
考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出这个正则表达式能接受的最长字符串的长度。
例如, 输入: ((xx|xxx)x|(x|xx))xx
程序应该输出: 6
资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
注意: main函数需要返回0; 只使用ANSI C/ANSI C++ 标准; 不要调用依赖于编译环境或操作系统的特殊函数。 所有依赖的函数必须明确地在源文件中 #include 不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
Ideas针对括号内的部分递归处理。
Code C++#include #include #include using namespace std; char s[100]; int len,pos; int f() { int m=0,tmp=0; while(pos<len) { switch(s[pos]) { case '(': { pos++; tmp+=f(); break; } case ')': { pos++; m=max(m,tmp); return m; } case 'x': { pos++; tmp++; break; } case '|': { pos++; m=max(m,tmp); tmp=0; break; } } } m=max(m,tmp); return m; } int main() { cin>>s; len=strlen(s); int ans=f(); cout<<ans<<endl; return 0; }Python
import sys def dfs(): global pos res = tmp = 0 while pos < len(s): if s[pos] == '(': pos += 1 tmp += dfs() elif s[pos] == ')': pos += 1 res = max(res, tmp) return res elif s[pos] == 'x': pos += 1 tmp += 1 elif s[pos] == '|': pos += 1 res = max(res, tmp) tmp = 0 res = max(res, tmp) return res if __name__ == '__main__': sys.setrecursionlimit(10000) pos = 0 s = input() print(dfs())