zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    <Java>第六次作业
    <Java>第五次作业
    <<JAVA技术>>第四次作业
    第三次Java作业--计科1501--李俊
    第二次Java作业--计科1501李俊
    《Java技术》第一次作业
    如何在IDEA中创建Web项目并部署到Tomcat中运行
    MySQL安装与配置(从未出错)
    java开发中的23种设计模式
    java.util包下的类及常用方法
  • 原文地址:https://www.cnblogs.com/acm-icpcer/p/8589758.html
Copyright © 2011-2022 走看看