有效的括号-力扣20-java

一、题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/valid-parentheses

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、运行结果

有效的括号-力扣20-java_第1张图片

三、解题思路

设置一个哈希表保存每种匹配的括号,以右括号未key,左括号为value(这样设置是为了方便后面查找),设置一个栈用于保存所有的左括号;

遍历括号串中的每一个括号,如果当前括号是左括号(哈希表中不包含该键),则将其放入到栈中,如果当前括号是右括号,则取出哈希表中与该右括号(key)对应的左括号(value),如果此时栈为空或栈顶的左括号与从哈希表中取出的左括号不相同,则为不匹配,如果相同,则弹出栈顶元素;遍历完整个括号串之后,如果栈为空,则表示所有的括号是匹配的,如果栈不为空,则表示有多出的左括号,是不匹配的。

四、AC代码

class Solution {
    public boolean isValid(String s) {
        int len = s.length();
        if(len == 0) return true;
        Map kMap = new HashMap<>();
        kMap.put(')', '(');
        kMap.put(']', '[');
        kMap.put('}', '{');
        Stack st = new Stack<>(); //保存匹配括号的栈
        for(int i=0; i

你可能感兴趣的:(#,力扣-java,java,算法,括号,力扣,有效)