LeetCode(20) ---[有效的括号](Java)

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(20) ---[有效的括号](Java)相关的知识,希望对你有一定的参考价值。


题目来源链接:有效的括号


题目说明:

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。


示例:

示例 1:
输入:s = "()"
输出:true

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

示例 3:
输入:s = "(]"
输出:false

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

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

提示:

1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成

思路:

首先排除字符串长度为奇数的情况;将左边的字符’{’ ‘(’ ‘[’ 入栈; 剩余的字符’}’ ‘)’ ']'和进入栈中的元素在出栈时进行比较;不符合的都返回false;最终结束时还需判断是否空栈;


class Solution {
    public boolean isValid(String s) {
        //创建栈st;
        Stack<String> st = new Stack<>();
        //首先排除字符串长度为奇数的情况;
        if (s.length() % 2 == 1) {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            //将字符串s中的字符一个一个获取出来;
            char c = s.charAt(i);
            //将左括号的字符'{' '(' '[' 入栈; 
            if (c == '{' || c == '[' || c == '(') {
                stack.push(c);
            } else {
                //若此时栈为空;则直接返回false;
                if (stack.isEmpty()) {
                    return false;
                } else {
                    //此时进行出栈操作;
                    //没有入栈的右括号字符'}' ')' ']'和进入栈中的元素在出栈时进行比较;
                    char tail = stack.pop();
                    if (c == '}' && tail != '{') {
                        return false;
                    } else if (c == ')' && tail != '(') {
                        return false;
                    } else if (c == ']' && tail != '[') {
                        return false;
                    }
                }
            }
        }
        //最终结束时还需判断是否空栈
        return stack.isEmpty();
    }
}

以上是关于LeetCode(20) ---[有效的括号](Java)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 20. 有效的括号

LeetCode - 20 :有效的括号

python刷LeetCode:20. 有效的括号

leetcode-20-有效的括号

LeetCode 20. 有效的括号(Valid Parentheses)

[LeetCode]20 Valid Parentheses 有效的括号