240
功不唐捐,玉汝于成😡。

正则问题(解题报告)

问题 1887: [蓝桥杯][2017年第八届真题]正则问题

时间限制: 1Sec 内存限制: 128MB 提交: 125 解决: 38

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


例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出
这个正则表达式能接受的最长字符串的长度。
样例输入
((xx|xxx)x|(x|xx))xx
样例输出
6

解释:(x)x表示x+x
    (x|xx)表示x或者xx
当遇到( 时,进入一个dfs
遇到 )时结束循环,比较|前后的值
遇到|时进行比较
遇到x时进行计数即可
#include<iostream>
#include<cmath>
#include<string>

using namespace std;
string a;
int p;
int dfs()
{
    int ans=0;
    int result=0;
  int len=a.length();
    while(p<len)
    {
        if(a[p]=='x')
        {
            p++;
            ans++;
        }
        else if(a[p]=='(')
        {
            p++;
            ans=ans+dfs();
        }
        else if(a[p]==')')
        {
            p++;
            break;
        }
        else
        {
            p++;
            result=max(result,ans);
            ans=0;
        }

    }
    result=max(result,ans);
    return result ;
}
int main ()
{
    cin>>a;
    cout<<dfs();
    return 0;
}

 

posted @ 2019-05-21 17:22  BigXun  阅读(191)  评论(0编辑  收藏  举报