蓝桥杯-正则问题(dfs,解决()的计算)

历届试题 正则问题  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  考虑一种简单的正则表达式:
  只由 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<bits/stdc++.h>
using namespace std;  

string str;  
int pos,len,ans;
  
int dfs(){  
    int num = 0, res = 0;  
    while (pos < len) {  
        if (str[pos] == '(') {  
            pos++;  
            num += dfs();  
        }  
        else if (str[pos] == ')') {  
            pos++;  
            break;  
        }  
        else if (str[pos] == '|') {  
            pos++;  
            res = max(num, res);  
            num = 0;  
        }  
        else {  
            pos++;  
            num++;
        }  
    }  
    res = max(num, res);  
    return res;  
}  
int main() 
{  
    cin >> str;    
    len = str.length(),pos = 0;  
    ans = dfs();  
    cout << ans << endl;  
    return 0;  
} 

原文地址:https://www.cnblogs.com/pearfl/p/10733164.html