有效的括号

有效的括号

一、题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
 
例如:
输入:s = "()"
输出:true

输入: s = "{()}"
输出:true

输入:"{})"
输出:false

二、题目分析

1,有效的括号是包含一对括号,一定是偶数个。2,字符串开始符号一定是左括号。3,这里括号存在一种顺序,同类型的括号一定是先左括号再有括号。

三、解题思路

1、括号数量是偶数个,如果出现奇数直接false。
2、创建Map集合,用于匹配括号。Key和Value分别表述不同类型括号的右括号和左括号。
3、循环遍历所给字符串,将左括号压进栈中,右括号进行匹配。

代码实现:

class Solution {
    public boolean isValid(String s) {

        if(s.length() % 2 == 1){
            return false;
        }

        Map<Character,Character> map = new HashMap<Character,Character>();
        map.put(')','(');
        map.put('}','{');
        map.put(']','[');


        Deque<Character> deque = new LinkedList<Character>();
        
        for(int i =0; i< s.length(); i++){
            char ch = s.charAt(i);
            if(map.containsKey(ch)){
                //匹配失败,直接返回false
                if(deque.isEmpty() || map.get(ch) != deque.peek()){
                    return false;
                }
                //括号匹配成功弹出栈
                deque.pop();
            }else{
                deque.push(ch);
            }
        } 
        return deque.isEmpty();
    }
}
posted @ 2022-07-31 23:58  z_coding  阅读(85)  评论(0)    收藏  举报