算法通关村第四关-黄金挑战栈的经典问题

括号匹配问题

描述 : 

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

题目 :

LeetCode 20.有效的括号 : 

20. 有效的括号

算法通关村第四关-黄金挑战栈的经典问题_第1张图片

分析 :

本题还是比较简单的,其中比较麻烦的是如何判断两个符号是不是一组的,我们可以用哈希表将所有符号先存储,左半边做key,右半边做value。遍历字符串的时候,遇到左半边符号就入栈,遇到右半边符号就与栈顶的符号比较,不匹配就返回false

解析 :

LeetCode

class Solution {
    public boolean isValid(String s) {
        //创建栈
        Stack sk = new Stack<>();

        //创建Map
        HashMap map = new HashMap();
        map.put('(',')');
        map.put('[',']');
        map.put('{','}');

        for(int i =0; i< s.length();i++){
            char c = s.charAt(i);
            //如果是左边就压栈
            if(map.containsKey(c)){
                sk.push(c);
            }else{
                //否则就弹栈,看是否和左边匹配
                
                if(!sk.isEmpty()){
                    if(c != map.get(sk.pop())){
                        return false;
                    }
                }else{
                    //如果栈是空的就不匹配
                    return false;
                }
            }
        }
        
        //如果栈里是空的证明都匹配了 , 栈里不是空的证明有一个单的 不匹配
        return sk.isEmpty();
    }
}

这关就到这里 , 下期一关见!

你可能感兴趣的:(算法村,算法,leetcode,数据结构)