1. 程式人生 > >[leetcode]使括號有效的最少新增

[leetcode]使括號有效的最少新增

921. 使括號有效的最少新增

給定一個由 ‘(’ 和 ‘)’ 括號組成的字串 S,我們需要新增最少的括號( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括號字串有效。

從形式上講,只有滿足下面幾點之一,括號字串才是有效的:

  • 它是一個空字串,或者
  • 它可以被寫成 AB (A 與 B 連線), 其中 A 和 B 都是有效字串,或者
  • 它可以被寫作 (A),其中 A 是有效字串。

給定一個括號字串,返回為使結果字串有效而必須新增的最少括號數。

示例 1:

輸入:"())"
輸出:1

示例 2:

輸入:"((("
輸出:3

示例 3:

輸入:"()"
輸出:0

示例 4:

輸入:"()))(("
輸出:4

提示:

  1. S.length <= 1000
  2. S 只包含 ‘(’ 和 ‘)’ 字元。

C++解法:

class Solution {
public:
    int minAddToMakeValid(string S) {
        int leftbracket = 0, rightbracket = 0;
        int ans = 0;

        if (S.size() == 0)
        {
            return 0;
        }
for (char c : S) { if (c == '(') { leftbracket++; } else if (c == ')' && leftbracket != 0) { leftbracket--; } else if (c == ')' && leftbracket == 0) {
ans++; } } if (leftbracket > rightbracket) { ans += (leftbracket - rightbracket); return ans; } else { ans += (rightbracket - leftbracket); return ans; } } };