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;
    }
  • 相关阅读:
    Linux cat
    Linux touch
    Win10 UAP 绑定
    Win10 资源文件
    Win10 启动模拟器
    Win10 安装Vs2015 社区版和企业版各个问题汇总
    Win10 开发者模式开启
    android 入门-本地化语言
    android 入门-基础了解
    wp8 入门到精通 定时更新瓷贴
  • 原文地址:https://www.cnblogs.com/hcw110/p/10578147.html
Copyright © 2011-2022 走看看