[LeetCode 32] 最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
没睡醒的脑回路:转换成 +1,-1 序列,利用两个充要条件(子段和为 0,子段任意前缀的和非负),在前缀和序列上用二分找满足条件的最远点
class Solution {
public:
int longestValidParentheses(string s) {
// 对前缀和序列 a,假设 s[i]='('
// 令 j 为 i 右侧 a[i]-2 首次出现位置(不存在则为 n)
// 则任意 i a(n);
a[0]=s[0]=='('?1:-1;
for(int i=1;i> o(n+n+2,vector(1,-1));
for(int i=0;i
注意到删除任意前缀后,无法匹配的括号仍然无法匹配。用栈模拟并标记所有可以匹配的括号后,求最长连续全 1 段即可