list里面存的是没有匹配的'('的索引, 那么每次匹配的到的时候, 就可以通过(i - 最近的没有匹配到的'('的index), 来计算得到当前的连续括号长度, 初始化的时候stack里面存一个-1来作为哨兵 @param s @return
java
class Solution {
/**
* list里面存的是没有匹配的'('的索引,
* 那么每次匹配的到的时候, 就可以通过(i - 最近的没有匹配到的'('的index),
* 来计算得到当前的连续括号长度, 初始化的时候stack里面存一个-1来作为哨兵
* @param s
* @return
*/
public int longestValidParentheses(String s) {
int ans = 0;
List<Integer> l = new ArrayList<>();
l.add(-1);
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
l.add(i);
} else if (l.size() > 1){
l.remove(l.size() - 1);
ans = Math.max(ans, i - l.get(l.size() - 1));
} else {
l.set(0, i);
}
}
return ans;
}
}