LeetCode 20题 有效的括号 解题思路|刷题打卡

623 阅读1分钟

一、题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

示例 1:

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

示例 2:

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

示例 3:

输入:s = "(]" 输出:false

示例 4:

输入:s = "([)]" 输出:false

示例 5:

输入:s = "{[]}" 输出:true

提示:

1 <= s.length <= 104

s 仅由括号 '()[]{}' 组成

二、思路分析:

看到括号的匹配,就想起了大学数据结构课讲栈时举例,用栈实现带括号的加减乘除运算。思路与本题一致,所以考虑用栈的出栈和入栈来实现。

三、AC 代码:

class Solution {
    public boolean isValid(String s) {
        Map<Character, Character> map = bracketMap();
        char[] chars = s.toCharArray();
        if (chars.length%2 != 0){
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < chars.length; i++) {
            boolean flag = map.containsKey(chars[i]);
            if (flag){
                stack.add(chars[i]);
            }else {
                if (stack.empty()){
                    return false;
                }
                Character pop = stack.pop();
                if (chars[i]  != map.get(pop)){
                    return false;
                }
            }
        }

        return stack.empty();
    }

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

四、总结:

追求极致的性能可考虑自己实现简易栈完成。

“本文正在参与「掘金 3 月闯关活动」,点击查看活动详情。”