【LeetCode】No.20. Valid Parentheses -- Java Version

168 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天。

题目链接: leetcode.com/problems/va…

1. 题目介绍(有效的括号)

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

【Translate】: 给定一个字符串s只包含字符'(',')','{','}','['和']',确定输入字符串是否有效。

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

【Translate】:

输入字符串在下列情况下有效:

  1. 左括号必须用相同类型的括号关闭。
  2. 左括号必须按正确的顺序关闭。

【测试用例】: test 【约束】: Constraints

2. 题解

2.1

  源于sunjiaqi的题解10 lines simple java solution using stack。 它是通过堆栈后入先出的特性,对比最后一个入栈的元素是否与右括号相匹配,如果不匹配则返回false。同时对应字符串全为右括号的情况,在循环中如果堆栈为空,也返回false;循环结束后,如果堆栈还为空,则返回true,反之,返回false.

    public boolean isValid(String s) {
        Stack<Character> sk = new Stack<>();
        for (char c : s.toCharArray())
        {
            if (c == '(' || c == '[' || c == '{') sk.push(c);
            else if(sk.empty()) return false;
            else if (c == ')' && sk.pop() != '(') return false;
            else if (c == ']' && sk.pop() != '[') return false;
            else if (c == '}' && sk.pop() != '{') return false;
        }
        return sk.empty();  
    }

case1

2.2 括号替换

  这种方法虽然简单易懂,但是比起堆栈效率就实在是太慢了。

public class Solution {
    public boolean isValid(String s) {
        int length;
    
        do {
            length = s.length();
            s = s.replace("()", "").replace("{}", "").replace("[]", "");
        } while(length != s.length());
    
        return s.length() == 0;
    }
}

case2

3. 可参考

[1] Java Stack 类 [2] stack.empty_Java Stack empty()方法与示例