zoukankan      html  css  js  c++  java
  • 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是自己写的一个栈构造函数,简单的入栈,出栈,长度。

    终于搞定了.

     
  • 相关阅读:
    angularjs select
    DataInputStream和DataOutputStream
    Linux gcc编译器
    Linux 网络配置
    Linux 实用工具vi
    Linux 文件系统
    Linux Linux系统管理命令
    Linux Linux常用命令二
    Linux Linux常用命令一
    数据结构 排序(归并排序)
  • 原文地址:https://www.cnblogs.com/xujiazheng/p/6092945.html
Copyright © 2011-2022 走看看