LeetCode in Python 20. Valid Parentheses
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()" Output: true
Example 2:
Input: "()[]{}" Output: true
Example 3:
Input: "(]" Output: false
Example 4:
Input: "([)]" Output: false
Example 5:
Input: "{[]}" Output: true
Solution:
最经典的题之一,遍历字符串放入stack,如果当前字符属于括号的开头,进栈;如果当前字符属于括号的结尾,比较栈顶,不配对返回false,配对出栈,遍历结束栈应该为空,否则返回false。
class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ st = [] for char in s: if char == '(' or char == '[' or char == '{': st.append(char) continue if not st: return False if char == ')' and st[-1] != '(': return False if char == ']' and st[-1] != '[': return False if char == '}' and st[-1] != '{': return False st.pop() return (not st)
还有一种带点trick味道的解法:
class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ while '()' in s or '[]' in s or '{}' in s: s = s.replace('()','').replace('[]','').replace('{}','') return (not s)
注意python字符串replace后要赋值,不然原字符串无变化。