首页 > 编程语言 > 详细

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

时间:2020-02-08 18:18:41      阅读:74      评论:0      收藏:0      [点我收藏+]

题目

描述:正则问题

考虑一种简单的正则表达式:
只由 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 }

 

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

原文:https://www.cnblogs.com/memocean/p/12283914.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!