题目如图所示:
我们可以用栈去判断字符串每个位置是否是有效的,有效就用数组标记为1 不有效就为0,然后最后通过数组去找出最长连续为1的子串就行
- 例如: "()(()"的mark为[0, 0, 1, 0, 0]
- 再例如: ")()((())"的mark为[1, 0, 0, 1, 0, 0, 0, 0]
- 经过这样的处理后, 此题就变成了寻找最长的连续的0的长度
public int longestValidParentheses(String s) {
Stack<Integer> stack = new Stack();
int n = s.length();
int[] valid = new int[n];
int ans = 0;
for(int i = 0; i < n; i++) {
char ch = s.charAt(i);
if(ch == '(')
stack.push(i);
else {
if(!stack.isEmpty()) {
int index = stack.pop();
valid[i] = 1;
valid[index] = 1;
}
}
}
int sum = 0;
for(int i = 0; i < n; i++) {
if(valid[i] == 1) {
sum += 1;
ans = Math.max(ans,sum);
} else
sum = 0;
}
return ans;
}
}