zoukankan      html  css  js  c++  java
  • 【算法与数据结构】栈的典型用法之一:括号匹配

    栈的典型用法之一:括号匹配

    Java
    https://leetcode-cn.com/problems/valid-parentheses/solution/zhan-de-dian-xing-yong-fa-zhi-yi-gua-hao-4av4/

    解题思路

    栈

    栈是一种“先进后出”的数据结构。

    本例中,栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。

    所以我的解决方案使用栈,碰到任意左括号时入栈,否则取出栈顶元素,判断当前字符是否与栈顶元素匹配,不匹配则停止循环并返回假,否则全部循环完之后判断栈是否为空(不为空可能存在在最前面只有左括号的情况),是空则返回真,否则返回假。

    代码

    class Solution {
        public boolean isValid(String s) {
            Stack<Character> stack = new Stack<Character>();
            // 依次遍历字符串中的字符
            for (int i = 0; i < s.length(); i++) {
                char tag = s.charAt(i);
    
                if (tag == '(' || tag == '[' || tag == '{') {
                    // 判断是为左括号则入栈
                    stack.push(tag);
                } else {
                    // 否则看是否匹配
    
                    // 栈为空说明没有左括号就来了右括号,不符合规则,失败
                    if(stack.isEmpty()){
                        return false;
                    }
    
                    // 取出栈顶元素,上面判断了不为空,所以没异常
                    char top = stack.pop();
    
                    // 判断栈顶元素是否与目标元素是匹配的,不匹配可以直接返回假了
                    if (top == '(' && tag!=')'){
                        return false;
                    }else if (top == '[' && tag!=']'){
                        return false;
                    }else if (top == '{' && tag!='}'){
                        return false;
                    }
                }
            }
            // 最后判断是否还有多的没有匹配的,可以直接返回结果
            return stack.isEmpty();
        }
    }
    
  • 相关阅读:
    php数组操作
    DedeCMS栏目页调用当前栏目名和上级栏目名
    ThinkPHP递归删除栏目
    WebUploader
    js中的事件委托或是事件代理
    thinkphp框架if标签条件表达式
    sublime插件安装
    thinkphp分页
    织梦自定义变量使用
    php foreach用法和实例
  • 原文地址:https://www.cnblogs.com/minuy/p/15208176.html
Copyright © 2011-2022 走看看