zoukankan      html  css  js  c++  java
  • 第八届 蓝桥杯 7、正则问题 dfs


    描述:正则问题

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

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

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

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

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

    程序应该输出:
    6

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


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

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

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

    #include <stdio.h>
    #include <string.h>
    int len;//len为输入数组长度
    char s[100];
    int p; 
    int max(int a, int b)
    {
        return a >= b ? a : b;
    }
    int dfs(){
        int ans=0;//需定义在dfs里!!! 
            int result=0;//用于记录,也是需定义在dfs里!!! 
        while(p<len){
            if(s[p]=='('){
                p++;
                ans=ans+dfs();
            }
            else if(s[p]==')'){
                p++;
                break;//停止搜索,接下来要通过比较
            }
            else if(s[p]=='|'){
                p++;
                result=max(ans,result);
                ans=0;//ans清零(为了前后比较) 
            }
            else{
                p++;
                ans++; 
            } 
        }
        result=max(result,ans);//遇到)break后需要比较 
        return result; 
        
    } 
    int main()
    {
        p=0;
        scanf("%s",s);//scanf数组的用法!!!
        len=strlen(s);
        printf("%d",dfs());
        return 0;
    }
  • 相关阅读:
    2021.1.20 学习总结
    2021.1.19 学习总结
    2021.1.18 学习总结
    学习总结13
    学习总结12
    学习总结11
    学习总结10
    ASP.NET网站开发步骤
    学习总结9
    阅读笔记4
  • 原文地址:https://www.cnblogs.com/hcw110/p/10578147.html
Copyright © 2011-2022 走看看