zoukankan      html  css  js  c++  java
  • [蓝桥杯2017初赛]正则问题

    题目链接:http://oj.ecustacm.cn/problem.php?id=1321

    题目描述

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

    输入

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

    输出

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

    样例输入 Copy

    ((xx|xxx)x|(x|xx))xx  

    样例输出 Copy

    6

    这题目的描述有点不清楚,这里放一张图就懂题意了

     思路:

    从前向后遍历。遇到(之后,进入dfs,遇到)之后跳出dfs,遇到x,统计x的数字。遇到 | 就比较大小。

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <string.h>
    #include <vector>
    #include <map>
    #include <stack>
    #include <set>
    #include <queue>
    #include <math.h>
    #include <cstdio>
    #include <iomanip>
    #include <time.h>
     
    #define LL long long
    #define INF 0x3f3f3f3f
    #define ls nod<<1
    #define rs (nod<<1)+1
     
    const int maxn = 1e9 + 10 ;
    const LL mod = 20010905;
     
    std::string s;
    int i;
     
    int dfs() {
        int ans = 0;
        int cnt = 0;
        int len = s.length();
        while (i < len) {
            if (s[i] == '(') {
                i++;
                cnt += dfs();
            }
            else if (s[i] == ')') {
                i++;
                break;
            }
            else if (s[i] == '|') {
                i++;
                ans = std::max(ans,cnt);
                cnt = 0;
            }
            else {
                i++;
                cnt++;
            }
        }
        return std::max(ans,cnt);;
    }
     
     
    int main() {
        std::cin >> s;
        printf("%d
    ",dfs());
        return 0;
    }
  • 相关阅读:
    Spark Executor内存管理
    Spring中Bean的生命周期及其扩展点
    NIO非阻塞IO
    TCP,UDP和socket,Http之间联系和区别
    md5加密,md5加盐加密和解密
    线程监测方法多久没被调用
    项目部署后,替换.class文件不生效
    mysql存储过程导入表
    java生成二维码
    Map中keySet和entrySet的区别
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/12245141.html
Copyright © 2011-2022 走看看