javascript匹配各種括號書寫是否正確


今天在codewars上做了一道題,如下

看上去就是驗證三種括號各種嵌套是否正確書寫,本來一頭霧水,一種括號很容易判斷, 但是三種怎么判斷!

本人只是個前端菜鳥,,不會什么高深的正則之類的。

於是,在群里一吼,有人這樣建議:

 js 的正則雖然不支持平衡組 但是可以通過一些技巧來彌補 老夫只能說這么多了,天機不可泄露 
當然 也可以寫個小算法 搞個棧玩玩
樓主聽上去好厲害的樣子,雖然不懂什么平衡組正則,但是棧還可以想一下啊!!
於是,開始了思考,該怎樣用棧的思維來解出這個題呢?是將左邊括號都進入一個棧,右括號進入另一棧,然后怎么比較。不會,下一個;
在冥思苦想中,終於有了!
首先思路是這樣的:
  定義了一個棧;定義了一個匹配用的字符串;
  循環這個各種括號組成的字符串,判斷當前這個符號是不是左括號,如果是則入棧,如果不是,則出棧,出棧元素與當前符號的相對應左括號匹配。
下面是代碼
function check(str) {
        var arr = str.split('') // 將傳入字符串轉化為數組
        var stack = new Stack() // 新建棧
        var aString = '({[]})'  // 用來匹配的字符串
        var index = -1          //初始化下標
        
        for (var i = 0; i < arr.length; i++) {
          var item = arr[i]
          if ((index = aString.indexOf(item)) < 3) {   // 將每一項都用aString匹配,下標小於3就是左括號
            // 左括號,入棧
            stack.into(item)
          } else {
            //  右括號,棧列表出棧一個元素與之匹配
            var target = stack.out()
            //  如果出棧元素不存在,則這個右括號沒有響應匹配的左括號,驗證失敗
            if (!target) {
              return false
            }
            // 取出與 item 對應的左括號與出棧元素匹配,不相等則驗證失敗
            if (target !== aString.charAt(5-index)) { 
              return false
            }
          }
        }
        //  循環匹配完成后,如果棧列表還有元素,則缺少與之匹配的右括號,驗證失敗
        if (stack.size()) {
          return false
        }
        //  ok
        return true
      }

Stack是自己寫的一個棧構造函數,簡單的入棧,出棧,長度。

終於搞定了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM