Algorithm to Count the Minimum Add to Make Parentheses Valid

  • 时间:2020-09-24 11:54:15
  • 分类:网络文摘
  • 阅读:130 次

Given a string S of ‘(‘ and ‘)’ parentheses, we add the minimum number of parentheses ( ‘(‘ or ‘)’, and in any positions ) so that the resulting parentheses string is valid.

Formally, a parentheses string is valid if and only if:

  • It is the empty string, or
  • It can be written as AB (A concatenated with B), where A and B are valid strings, or
  • It can be written as (A), where A is a valid string.
  • Given a parentheses string, return the minimum number of parentheses we must add to make the resulting string valid.

Example 1:
Input: “())”
Output: 1

Example 2:
Input: “(((”
Output: 3

Example 3:
Input: “()”
Output: 0

Example 4:
Input: “()))((”
Output: 4

Note:
S.length <= 1000
S only consists of ‘(‘ and ‘)’ characters.

Parentheses Balance Algorithm

The algorithm is to count the number of the left Parentheses and, if we meet right Parentheses, we increment the answer if there is no enough left Parentheses, or we decrement the counter as to close the corresponding left Parentheses.

The final answer (the minimal add) plus the counter of the left Parentheses as we need to add to close them.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
    int minAddToMakeValid(string S) {
        int left = 0;
        int ans = 0;
        for (const auto &n: S) {
            if (n == '(') {
                left ++;
            } else {
                if (left > 0) {
                    left --;
                } else {
                    ans ++;
                }
            }
        }
        return ans + left;
    }
};
class Solution {
public:
    int minAddToMakeValid(string S) {
        int left = 0;
        int ans = 0;
        for (const auto &n: S) {
            if (n == '(') {
                left ++;
            } else {
                if (left > 0) {
                    left --;
                } else {
                    ans ++;
                }
            }
        }
        return ans + left;
    }
};

O(N) time as we need to scan the entire string and O(1) space, obviously.

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
校园烟酒浅谈作文900字  美丽的小院作文  百年世博,梦圆上海  我爱我美丽的家乡作文  辉煌明天  如果把铁块竖放在水中,那么水面上升多少厘米  A×B×C=300,A×C=100,A×4=C  24点题:给定2、6、9、9四个数  数学题:他们到达A、B两地的中点C地时都会提速20%  一个数的近似值是20万,这个数最大是多少?最小是多少? 
评论列表
添加评论