20. 有效的括號

20. 有效的括號

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。
示例 1:
輸入: “()”
輸出: true
示例 2:
輸入: “()[]{}”
輸出: true
示例 3:
輸入: “(]”
輸出: false
示例 4:
輸入: “([)]”
輸出: false
示例 5:
輸入: “{[]}”
輸出: true
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-parentheses
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路:

1.創建一個空數組,對字符串進行分割,對每一個字符判斷是左括號還是右括號
2.左括號進棧push
3.右括號則分情況判斷:
 3.1 若棧爲空,則return false;
 3.2 若棧不爲空,彈出棧頂元素:
  3.2.1 若元素爲對應的左括號,return true
  .2.2 否則,return false

/**
 * 
 * @param {String} str 
 * @return {boolean}
 */
var isValid = function (str) {
    if (!str) return true; //Note that an empty string is also considered valid.
    const stack = [];
    var str2Arr = str.split("");
    for (let elem of str2Arr) {
        switch (elem) {
            case "{":
            case "[":
            case "(":
                stack.push(elem);
                break;
            case "}":
                if (!(stack.length && stack.pop() === "{")) {
                    return false;
                }
                break;
            case "]":
                if (!(stack.length && stack.pop() === "[")) {
                    return false;
                }
                break;
            case ")":
                if (!(stack.length && stack.pop() === "(")) {
                    return false;
                }
                break;
            default:
                return false;
        }
    }
    return !stack.length;
}

擴展:

1.如果只有一種括號,則採用計數法
Problem2:921.使括號有效的最少添加

給定一個由 ‘(’ 和 ‘)’ 括號組成的字符串 S,我們需要添加最少的括號( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括號字符串有效。
從形式上講,只有滿足下面幾點之一,括號字符串纔是有效的:
它是一個空字符串,或者
它可以被寫成 AB (A 與 B 連接), 其中 A 和 B 都是有效字符串,或者
它可以被寫作 (A),其中 A 是有效字符串。
給定一個括號字符串,返回爲使結果字符串有效而必須添加的最少括號數。

Problem3: 1021. 刪除最外層的括號

有效括號字符串爲空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括號字符串,+ 代表字符串的連接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括號字符串。
如果有效字符串 S 非空,且不存在將其拆分爲 S = A+B 的方法,我們稱其爲原語(primitive),其中 A 和 B 都是非空有效括號字符串。
給出一個非空有效字符串 S,考慮將其進行原語化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括號字符串原語。
對 S 進行原語化分解,刪除分解中每個原語字符串的最外層括號,返回 S 。
2.如果有多個匹配字段,如解析HTMl或XML標記,因匹配類型過多,可以採用Map哈希表,存儲匹配類型
如:const mapper = {’{’: “}”,"[": “]”,"(": “)”};


leetCode分類刷題   該地址長期、每週更新LeetCode分類刷題

參考資料
  leetcode題解

發佈了23 篇原創文章 · 獲贊 4 · 訪問量 794
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章