给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。
如:输入“(()”,输出2;输入")()())",输出4.
思路:两个for循环扫描字符串,用栈检测是否有合格串。
我的代码:
public class LongestValidParentheses {
public int longestValidParentheses(String s) {
int max = 0;
if(s.length() == 0||s.length() == 1)return max;
Stack<Character> stack = new Stack<>();
for(int i = 0;i<s.length();i++) {
int tmpMax = 0;
for(int j = i;j<s.length();j++) {
if(s.charAt(j) == '(') {
stack.push('(');
tmpMax++;
}else if (s.charAt(j) == ')') {
if(stack.isEmpty()) {
max = max<tmpMax?tmpMax:max;
break;
}else {
stack.pop();
tmpMax++;
}
}
//栈空说明此时的串是合格的
if(stack.isEmpty())max = max<tmpMax?tmpMax:max;
}
//栈空说明此串到尾部都是合格的
if(stack.isEmpty())max = max<tmpMax?tmpMax:max;
stack.clear();
}
return max;
}
public static void main(String[] args) {
System.out.println(new LongestValidParentheses().longestValidParentheses("(()"));
System.out.println(new LongestValidParentheses().longestValidParentheses(")()())"));
System.out.println(new LongestValidParentheses().longestValidParentheses("((((()"));
System.out.println(new LongestValidParentheses().longestValidParentheses(")(((((()())()()))()(()))("));
}
}
运行结果: