Skip to content

Latest commit

 

History

History

0020.Valid Parentheses

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English Version

题目描述

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

有效字符串需满足:

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

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

解法

Python3

class Solution:
    def isValid(self, s: str) -> bool:
        if not s:
            return True
        helper = []
        for c in s:
            if c in '([{':
                helper.append(c)
            else:
                if len(helper) == 0 or (helper.pop() + c) not in ["()", "[]", "{}"]:
                    return False
        return len(helper) == 0

Java

class Solution {
    public boolean isValid(String s) {
        if (s == null || s == "") {
            return true;
        }
        char[] chars = s.toCharArray();
        Stack<Character> helper = new Stack<>();
        for (char c : chars) {
            boolean isLeft = c == '(' || c == '[' || c == '{';
            if (isLeft) {
                helper.push(c);
            } else {
                if (helper.isEmpty() || !match(helper.pop(), c)) {
                    return false;
                }
            }
        }
        return helper.isEmpty();
    }

    private boolean match(char left, char right) {
        return (left == '(' && right == ')')
            || (left == '[' && right == ']')
            || (left == '{' && right == '}');
    }
}

...