描述:正則問(wèn)題
考慮一種簡(jiǎn)單的正則表達(dá)式:
只由 x ( ) | 組成的正則表達(dá)式奢米。
小明想求出這個(gè)正則表達(dá)式能接受的最長(zhǎng)字符串的長(zhǎng)度赴捞。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最長(zhǎng)字符串是: xxxxxx将宪,長(zhǎng)度是6佳魔。
輸入
一個(gè)由x()|組成的正則表達(dá)式搅窿。輸入長(zhǎng)度不超過(guò)100锯梁,保證合法。
輸出
這個(gè)正則表達(dá)式能接受的最長(zhǎng)字符串的長(zhǎng)度榜聂。
例如搞疗,
輸入:
((xx|xxx)x|(x|xx))xx
程序應(yīng)該輸出:
6
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫(huà)蛇添足地打印類似:“請(qǐng)您輸入...” 的多余內(nèi)容须肆。
所有代碼放在同一個(gè)源文件中匿乃,調(diào)試通過(guò)后桩皿,拷貝提交該源碼。
不要使用package語(yǔ)句幢炸。不要使用jdk1.7及以上版本的特性泄隔。
主類的名字必須是:Main,否則按無(wú)效代碼處理宛徊。
思路
- 將輸入都存入數(shù)組內(nèi) - nextLine.split("")
- 字符串判斷相等 "".equals("")
- 回調(diào)深搜
代碼
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;
}
}