有效的括號 leetcode

這道題感覺挺有意思,之前想了很多種方法,但是都很麻煩 看到一道很巧妙的解法 碼一下~

思路:把前括號([{ 使用 Map 與後括號 映射起來,循環輸入的字符串,如果是前括號,放入棧中,如果是後括號,看是否與棧頂的前括號匹配是一對,如果是,將棧頂元素出棧,繼續向下匹配,直到最後匹配成功,返回true,有一個不能匹配成功,返回false

主要技術:Map、棧

var isValid = function(s) {
      if (s.length%2) return false // 奇數不成對 直接返回false
      var map = new Map()
      map.set('(', ')')
      map.set('[',']')
      map.set('{','}')
      var arr = []
      for (var i = 0; i < s.length; i++) {
        // 匹配上說明是前括號
        if (map.has(s[i])) {
          arr.push(s[i])
        } else {
          // 後括號 與數組最後一項看是否匹配
          if (map.get(arr[arr.length - 1]) === s[i]) {
            arr.pop() // 匹配上出棧 刪除數組最後一項
          } else {
            return false
          }
        }
      }
      return arr.length === 0 // 最後都匹配上棧爲空
    };

 

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