LeetCode 921. 使括號有效的最少添加

原題地址921. 使括號有效的最少添加


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

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

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

給定一個括號字符串,返回爲使結果字符串有效而必須添加的最少括號數。

示例 1:

輸入:"())"
輸出:1
示例 2:

輸入:"((("
輸出:3
示例 3:

輸入:"()"
輸出:0
示例 4:

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


提示:

S.length <= 1000
S 只包含 '(' 和 ')' 字符。

算法

逐個遍歷字符,若爲 '(' ,計數 left 加1;若爲 ')' ,如果先前有 '(' ,則 left 減1;否則 right 加1。最終 left+right 就是無法匹配上的括號的數量。


代碼

class Solution:
    def minAddToMakeValid(self, S):
        """
        :type S: str
        :rtype: int
        """
        if not S:
            return 0
        left, right = 0, 0
        for i in S:
            if i == '(':
                left += 1
            elif left > 0:
                left -= 1
            else:
                right += 1
        return right + left

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章