题目描述
给出一个仅包含字符'('和')'的字符串,计算最长的格式正确的括号子串的长度。
对于字符串"(()"来说,最长的格式正确的子串是"()",长度为2.
一些实例:
对于字符串")()())",来说,最长的格式正确的子串是"()()",长度为4
对于字符串"()(())"来说,最长的格式正确的子串是"()(())", 长度为6
对于字符串"())()"来说,最长的格式正确的子串是"()",长度为2
思路:遍历字符串,遇到'('则将其位置压入栈;
遇到')',判断此时栈情况,若栈为空,更新起始点的位置,若栈不为空,则更新合法括弧的长度。
import java.util.*;
public class Solution {
public int longestValidParentheses(String s) {
if(s==null&&s.length()<2)
return 0;
Stack<Integer> stack=new Stack<Integer>();
int maxnum=0;
int left=-1;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('){
stack.push(i);
}
else{
if(stack.empty()){
left=i;
}
else{
stack.pop();
if(stack.empty()){
maxnum=Math.max(maxnum,i-left);
}
else{
maxnum=Math.max(maxnum,i-stack.peek());
}
}
}
}
return maxnum;
}
}