蓝桥杯2017-省赛-C/C++-A组7题

题目

描述:正则问题

考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。 

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

输入
----
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。 

输出
----
这个正则表达式能接受的最长字符串的长度。 

例如,
输入:
((xx|xxx)x|(x|xx))xx 

程序应该输出:

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。

提交程序时,注意选择所期望的语言类型和编译器类型。

代码

 1 //input:
 2 //((xx|xxx)x|(x|xx))xx 
 3 //output:
 4 //6
 5 #include<iostream>
 6 #include<cmath>
 7 #include<string.h>
 8 using namespace std;
 9 char map[100+5];
10 int i=0;
11 
12 int func(){
13     int maxx=0;//临时最长长度 
14     int temp=0;//临时长度 
15     int len=strlen(map);
16     while(i<len){
17         if(map[i]=='('){//进入一对括号的计算中 
18             i++;
19             temp=temp+func();
20         }else if(map[i]=='|'){//选取最长长度 
21             i++;
22             maxx=max(temp,maxx);
23             temp=0;
24             
25         }else if(map[i]==')'){//结束一对括号的计算 
26             i++;
27             break;
28         }else{//计算长度 
29             temp++;
30             i++;
31         }
32     }
33     return max(temp,maxx);//返回一对括号的结果 
34 }
35 int main(){
36     cin>>map;
37     int result=func();
38     cout<<result<<endl;
39 }

猜你喜欢

转载自www.cnblogs.com/memocean/p/12283914.html