正则问题-DFS

题目描述

考虑一种简单的正则表达式:

只由 x ( ) | 组成的正则表达式。

小明想求出这个正则表达式能接受的最长字符串的长度。

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

输入描述

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

输出描述

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

输入输出样例

示例

输入

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

输出

6

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

解析: 

正则问题-DFS_第1张图片

 DFS进行搜索,遇到左括号进入下一层的DFS。计算x的个数,当遇到 '|' 时,进入下一层DFS,计算x的个数,当遇到右括号时,返回当前的x的个数,与 '|' 左部分的比较,取最大值返回上一层。

#include 
#include
#include
#include
using namespace std;
typedef long long ll;
const ll MAX = 1e5 + 4;
const ll INF = 1e9;
ll i = 0;//计数第几个字符
ll dfs(string s)
{
    ll t = 0;//当前层上的x个数
    while(i> s;
    cout<

你可能感兴趣的:(深度优先,算法)