目录
牛客地址
解题思路
- 如果是"(":直接入栈当前下标
- 如果是")":
- 如果栈为空,则利用last记录下一次有效配对括号的起点位置-1
- 如果栈非空
- 弹出上一个"("的索引index
- 如果为空,则表示是完整对的结尾位置,利用last更新合法括弧的长度
- 如果非空,则也同样利用stack.peek()更新合法括弧的长度
- 弹出上一个"("的索引index
代码实现
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return int整型
*/
public int longestValidParentheses (String s) {
// write code here
if(s == null || "".equals(s)){
return 0;
}
//注意默认值为0
int last = -1;
int res = 0;
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '('){
stack.push(i);
}
else{
if(stack.isEmpty()){
last = i;
}
else{
stack.pop();
if(stack.isEmpty()){
res = Math.max(res, i - last);
}
else{
res = Math.max(res, i - stack.peek());
}
}
}
}
return res;
}
}