难度困难632收藏分享切换为英文关注反馈
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
解法:就两种括号,所以合格得只能是(),()(),那么不需要用栈来维护。只要统计相应区域内得左右括号数目是不是相等就行。
class Solution {
public int longestValidParentheses(String s) {
char[] c = s.toCharArray();
return Math.max(bj(c,0,s.length(),1,'('),bj(c,s.length()-1,-1,-1,')') );
}
public int bj(char[] c,int start,int end,int k,char cflag) {
int maxn=0,max=0,sum=0,vmax=0;
for(int i=start;i!=end;i+=k) {
sum+=(c[i]==cflag ? 1 : -1);
maxn++;
if(sum<0) {
max=max>vmax ? max:vmax;
sum=0;
maxn=0;
vmax=0;
}
else if(sum==0)
vmax=maxn;
}
return max>vmax ? max : vmax;
}
}