https://leetcode-cn.com/problems/longest-valid-parentheses
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
复杂度: 时间O(N),空间O(1)
解析:
从左往右,遇到左括号L++,遇到右括号R++。如果R>L说明前面到这里为止不能和后面匹配了,就L=R=0。
这样处理后,L==R说明当前匹配成功,ans=max(ans,2*R)。
但是可能有效序列的左边多出几个左括号导致没有L==R,此时的处理是方法是从后往前再做一遍。
class Solution {
public:
int longestValidParentheses(string s) {
int l=0,r=0,ans=0;
for(int i=0;i<s.length();i++){
if(s[i]=='(')l++;
else r++;
if(r>l)l=r=0;
else if(r==l)ans=max(ans,2*r);
}
l=r=0;
for(int i=s.length()-1;i>=0;i--){
if(s[i]==')')l++;
else r++;
if(r>l)l=r=0;
else if(r==l)ans=max(ans,2*r);
}
return ans;
}
};