Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
For “(()”, the longest valid parentheses substring is “()”, which has length = 2.
Another example is “)()())”, where the longest valid parentheses substring is “()()”, which has length = 4.
问题描述:这是要寻找最长子串的长度,利用栈的先入后出性,遇见“(”将i入栈,遇见“)”将i标记为1,同时将stack.pop()也标价为1,因为pop()出的数是最近可以和“)”匹配的。然后寻找标记的最长连续1的长度。具体代码如下:
public int longestValidParentheses(String s) {
int[] num=new int[s.length()];
Stack<Integer> stack=new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i)=='(') {
stack.push(i);
}else {
if (!stack.isEmpty()) {
num[i]=1;
num[stack.pop()]=1;
}
}
}
int curLength=0;
int MaxLength=0;
for (int i = 0; i < num.length; i++) {
if (num[i]>0) {
curLength++;
}else {
curLength=0;
}
MaxLength=Math.max(MaxLength, curLength);
}
return MaxLength;
}