描述:正则问题
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入
一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出
这个正则表达式能接受的最长字符串的长度。
例如,
输入:
((xx|xxx)x|(x|xx))xx
程序应该输出:
6
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
思路
- 将输入都存入数组内 - nextLine.split("")
- 字符串判断相等 "".equals("")
- 回调深搜
代码
import java.util.Scanner;
public class Main {
static int len = 0;
static String[] arr;
public static void main (String args[]) {
Scanner sc = new Scanner(System.in);
arr = sc.nextLine().split("");
int re = dfs();
System.out.println(re);
}
static int dfs() {
int result = 0, num = 0;
while(len < arr.length) {
if (arr[len].equals("(")) {
len ++;
num = num + dfs();
}
else if (arr[len].equals("|")) {
len ++;
result = num > result ? num : result;
num = 0;
}
else if (arr[len].equals(")")) {
len ++;
break;
} else {
len ++;
num ++;
}
}
result = num > result ? num : result;
return result;
}
}
网友评论