栈应用:括号匹配

GitHub:https://github.com/BadWaka/data-structure-algorithm/blob/master/stack/bracketMatching.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bracket matching 栈的应用 括号匹配</title>
</head>
<body>

<script src="stack.js"></script>
<script>

    /**
     * 栈应用:括号匹配
     *
     * 描述:任意输入一组括号,可以判断括号是否匹配
     * 字符串示例:[()] [()()] [()[()]] [[()]
     */

    var BracketMatching = function () {

        this.stack = new Stack(100);
        this.leftArray = ['{', '[', '('];
        this.rightArray = ['}', ']', ')'];

        var that = this;

        this.matching = function (string) {
            // 循环遍历传入的字符串
            for (var i = 0; i < string.length; i++) {
                // 获得字符
                var char = string[i];
                // 获得该字符在左括号数组里的index
                var indexLeft = that.leftArray.indexOf(char);
                // 判断该字符是否是左括号
                if (indexLeft !== -1) {
                    // 左括号;
                    console.log('左括号 char = ' + char);
                    // !==-1即代表是左括号
                    // 将该符号需要匹配的另一半push进入stack,这样找的时候方便
                    that.stack.push(that.rightArray[indexLeft]);
                } else {
                    // 右括号
                    console.log('右括号 char = ' + char);
                    // 取出栈顶元素;注意这里要减一,因为栈顶是要大一号的
                    var topElement = that.stack.stack[that.stack.top - 1];
                    // 如果字符与栈顶元素相等
                    if (char === topElement) {
                        // 匹配成功
                        // 出栈
                        that.stack.pop();
                    } else {
                        // 匹配失败
                        console.log('匹配失败');
                        return false;
                    }
                }
            }
            console.log('匹配成功');
            return true;    // 只要没有雨中途return false的都成功
        };
    };

    // 测试case

    var ins = new BracketMatching();
    ins.matching('[({()})]');
    ins.matching('[({(})]');


</script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 好像只有沉浸于技术的世界才能让我镇静下来。不用操心各种琐碎的闹心的事情,不用周旋在形形色色的人群中,面对着的只是一...
    小麦哥阅读 936评论 0 0
  • 2.安排谈判(2) 词汇馆 动词 appoint 美[ə'pɔɪnt] 约定 名词 calendar 美['kæ...
    膨胀的兔子阅读 2,656评论 0 1
  • 添加依赖 mainActivity中的代码 footview中自定义LinearLayout再自定义一个Progr...
    lx0306阅读 3,511评论 0 0
  • 山里山 山外山 千山不能拦 跑丢了鞋 跑丢了人 游荡着魂 清明时节 不上坟 家有雨 目千里 天地为尊 骨未寒 热闹...
    山木支阅读 2,415评论 0 0