• 2017年蓝桥杯省赛A组c++第7题(正则问题)


    /*
    描述:正则问题
    
    考虑一种简单的正则表达式:
    只由 x ( ) | 组成的正则表达式。
    小明想求出这个正则表达式能接受的最长字符串的长度。  
    
    例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
    
    输入
    ----
    一个由x()|组成的正则表达式。输入长度不超过100,保证合法。  
    
    输出
    ----
    这个正则表达式能接受的最长字符串的长度。  
    
    例如,
    输入:
    ((xx|xxx)x|(x|xx))xx  
    
    程序应该输出:
    6  
    */
    
    #include<cstdio>  
    #include<cstring>  
    #include<algorithm>  
    #include<iostream>  
    #include<string>  
    #include<vector>  
    #include<stack>  
    #include<bitset>  
    #include<cstdlib>  
    #include<cmath>  
    #include<set>  
    #include<list>  
    #include<deque>  
    #include<map>  
    #include<queue>  
    using namespace std;
     
    const int N=100;
    char str[N]="((xx|xxx)x|(x|xx))xx";
    int i=0;
    int result=0;
    
    int f()
    {
        int max=0;
        int temp=0;
        while(i<strlen(str))
        {
            if(str[i]=='(')
            {
                i++;
                temp+=f();//还不能确定temp+f()是不是最大,故而不能写 max+=f();
            }
            else if(str[i]==')')
            {
                i++;
                break;//不能在这里直接写 return max;因为在返回之前一定还要比较max和temp的大小,从而返回两者中更大者;而且还要考虑循环的大条件
            }
            else if(str[i]=='|')
            {
                i++;
                if(temp>max) max=temp;//总结这个|字符"之前的"最长x字符串的长度 
                temp=0;
            }
            else//字符为x的情况 
            {
                temp++;
                i++;
            }
        } 
        if(temp>max)    max=temp;
        return max;
    }
     
    int main()
    {
        //while(scanf("%s",str)!=0&&str!=NULL)
        {
            result=f();
            cout<<result<<endl;
        }
        return 0;
    }

    很难的一题,思考了很久,主要还是对于深度优先算法理解不够。这道题是误打误撞做出来的,并没有完全理解。不过看过某大佬画的一张图,感觉有助于理解:

    tz@Teaching Building NO.4 HZAU

    2018/3/17

  • 相关阅读:
    css引入讲解及media
    css中的media
    IE6存在的一些兼容
    Eclipse 反编译插件JadClipse安装
    JavaScript 常用功能总结
    241个jquery插件—jquery插件大全
    javascript深入理解js闭包
    JS拖拽插件实现步骤
    JavaScript拖拽原理的实现
    js实现拖拽效果
  • 原文地址:https://www.cnblogs.com/acm-icpcer/p/8589758.html
Copyright © 2020-2023  润新知