美文网首页
栈应用:括号匹配

栈应用:括号匹配

作者: waka | 来源:发表于2017-02-14 14:21 被阅读48次

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>

相关文章

  • 栈应用:括号匹配

    GitHub:https://github.com/BadWaka/data-structure-algorith...

  • 栈的应用

    动态数组的子集 栈的应用undo.png leetcode括号匹配:

  • 2019-05-12(栈应用 括号匹配 leetcode 20

    括号匹配思路: 1、遇到左边的括号 进栈 ,2、遇到右边的括号获取原来栈 中栈顶元素,与刚遇到的值进行匹配,匹配成...

  • 栈的应用:括号匹配

    题目:给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ...

  • 栈的应用---括号匹配

    stack.h main.c

  • chap3-栈和队列

    括号匹配问题 // 括号匹配,遇到 '\0' 结束// 遇到花、中、圆左括号进栈,遇到花、中、圆右括号检查栈顶元素...

  • 栈: 顺序栈 栈的应用:函数调用栈,表达式求值,括号匹配,浏览器的前进后退。相关code:https://gith...

  • 20. Valid Parentheses

    使用栈数据结构: 遇到左括号,需要压栈。 遇到右括号,判断栈顶是否和当前右括号匹配;若不匹配则返回false,否则...

  • 互联网秋招刷题leetcode总结——栈与队列

    栈 括号类问题 20. 有效的括号(easy) 遍历字符串,每次与栈顶括号进行匹配,匹配成功栈顶弹出,否则继续压入...

  • 利用栈解决括号匹配问题

    遍历字符串,遇到左括号,入栈。遇到有括号,出栈。遍历完后,如果栈中还有元素就说明括号不匹配,否则匹配。 demo地...

网友评论

      本文标题:栈应用:括号匹配

      本文链接:https://www.haomeiwen.com/subject/gtbxwttx.html