LeetCode 20:有效的括號 Valid Parentheses

給定一個只包括 '('')''{''}''['']' 的字符串,判斷字符串是否有效。java

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

有效字符串需知足:微信

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

An input string is valid if:app

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

注意空字符串可被認爲是有效字符串。ide

Note that an empty string is also considered valid.code

示例 1:字符串

輸入: "()"
輸出: true

示例 2:input

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

示例 3:string

輸入: "(]"
輸出: false

示例 4:it

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

示例 5:

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

解題思路:

很簡單的題,將字符串每一個字符壓入棧,簡單判斷便可。如:

輸入: "{[]}"
初始棧爲空,'{' 入棧
下一個字符
棧頂元素 '{'與 '[' 不匹配,'[' 入棧
下一個字符
棧頂元素 '['與 ']' 匹配,'[' 出棧
下一個字符
棧頂元素 '{'與 '}' 匹配,'}' 出棧
結束,棧爲空,返回 True

關鍵在於判斷字符是否匹配,匹配的標準是相反的括號字符,並不是相同字符。能夠用 switch 判斷三種括號字符,或者三個 if 語句,再或者能夠用散列表映射括號關係。

Java:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();//初始化棧
        for (char b : s.toCharArray()) {
            switch (b) {
                case '(': {
                    stack.push(')');
                    break;
                }
                case '{': {
                    stack.push('}');
                    break;
                }
                case '[': {
                    stack.push(']');
                    break;
                }
                default: {//不匹配的狀況返回false
                    if (stack.isEmpty() || stack.pop() != b) {
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();//棧爲空則證實所有匹配,返回true,不然返回false
    }
}

Python:

注:python中沒有 switch...case... 語句,官方讓用 if 判斷代替...

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for c in s:
            if c == '[':
                stack.append(']')
            elif c == '(':
                stack.append(')')
            elif c == '{':
                stack.append('}')
            elif len(stack) == 0 or stack.pop() != c:
                return False
        return len(stack) == 0

歡迎關注微信公.衆號:愛寫Bug

相關文章
相關標籤/搜索