LeetCode 32. 最长有效括号
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
算法:我们用两个变量分别记录左右括号的长度,先从左到右走一趟,当左括号小于右括号时归零,若中途两者相等,更新括号长度;然后再从右往左走一趟,规则与第一次相反。
class Solution { public: int longestValidParentheses(string s) { int l=0,r=0,res=0; for(int i=0;i<s.size();i++){ if(s[i]=='(')l++; else r++; if(l==r)res=max(res,2*l); else if(r>l)l=r=0; } l=r=0; for(int i=s.size()-1;i>=0;i--){ if(s[i]=='(')l++; else r++; if(l==r)res=max(res,2*l); else if(l>r)l=r=0; } return res; } };