您当前的位置: 首页 >  c++

2017/Province_C_C++_A/7/正则问题

发布时间:2019-03-18 20:41:29 ,浏览量:0

题目

考虑一种简单的正则表达式:只由 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()) 
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109769博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2354s