匹配小括号“()”,字符串只有“(”和“)”组成,找出最长连续的小括号子串,输出该最长子串的长度。
示例:(((()()()))))()))
输出:6
说明:示例字符串从第4个字符开始第一个连续小括号子串“()()()”,从第14个字符开始二个小括号子串“()”,第一个子串最长,长度为6。
本题目的是考察栈对于字符串匹配的应用,但一般均是本着先功能实现的原则写代码。
Java代码:
public static int getMaxLengthParentheses(String str) {
if (str == null || str.trim().length() == 0) {
return -1;
}
// 小括号
char pleft = '(';
char pright = ')';
// 用这个保存最长子串
StringBuilder max = new StringBuilder();
//用这个StringBuilder做匹配
StringBuilder sb = new StringBuilder();
for (int k = 0; k < str.length() - 1;) {
if (pleft == str.charAt(k) && pright == str.charAt(k + 1)) {
sb.append("()");
k += 2;
} else {
//匹配中断时,比较匹配串的长度,如果当前匹配比较长,就把当前串赋值给最长串
if (sb.length() > max.length()) {
max = sb;
}
//重新创建当前匹配记录对象
sb = new StringBuilder();
k++;
}
}
return max.length();
}