leetcode 921. 使括号有效的最少添加(机智题)

题意:

给一串括号组成的序列,问最少需要添加多少个才使得括号合法。

从形式上讲,只有满足下面几点之一,括号字符串才是合法的:

  • 它是一个空字符串,或者
  • 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
  • 它可以被写作 (A),其中 A 是有效字符串

思路:

一开始蒙着眼睛写DP,结果超时了。。。。。原来是个机智题。如果前面有"(",那么后面来“)”就能保证是合法的。所以我们只需要统计最前面多的")"和最后面多的“(”。即第一个'('之后的‘(’应该要和')'相同数量,如果这个后面的括号和反括号的数量不匹配的话,需要额外添加括号与之匹配这是第一个需要补括号的地方,同时,第一个'('之前的‘)’需要额外添加括号成对,这是第二个需要补括号的地方。这两个地方需要补括号的数量之和就是答案。

代码:

class Solution {
public:
int minAddToMakeValid(string S) {
    int len = S.length();
    int first = 0,last = 0; //first记录反括号数量,last记录括号数量
    for(int i=0;i<len;i++){
        if(S[i]=='(')last++;
        else {
            if(last==0)first++;
            else last--;
        }
    }
    return first+last;
}
};

猜你喜欢

转载自blog.csdn.net/lwgkzl/article/details/83151765
今日推荐