·【蓝桥】·正则问题
题目来源: ·【蓝桥】·正则问题
本题可作为一道练习递归的例题~
问题描述
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入格式
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出格式
这个正则表达式能接受的最长字符串的长度。
样例输入
((xx|xxx)x|(x|xx))xx
样例输出
6
数据规模和约定
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
题目分析
对于给定的字符串,只需利用|(或运算的性质)计算即可,连续的x累加长度
如输入样例: ((xx|xxx)x|(x|xx))xx
((2|3)1|(1|2))2 = (4|2)2 = 6
这是一个不错的练习递归的例题!
算法思想
pos从字符串下标为0处开始扫描,扫描完即可,每个(…)作为一层递归
switch(s[pos]){
case ‘(‘: 遇到(向下递归一层
case ‘x’: 连续的x累加长度,now++
case ‘|’: 更新一下ans,考虑到后面还有x,now=0
case ‘)’:更新一下ans,这一层递归结束
}
—————————————代码如下—————————————
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!