Problem 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:
1 | Input: "()" |
Example 2:
1 | Input: "()[]{}" |
Example 3:
1 | Input: "(]" |
Example 4:
1 | Input: "([)]" |
Example 5:
1 | Input: "{[]}" |
Good solution for efficiency
1 | class Solution: |
left
and right
are lists. mapping
is a dictionary, which combines right
and left
using dict
and zip
function. Searching/matching in dictionary would be more efficient than in list.
Pythonic way to express checking:
1 | if s[i] in mapping: |
If s[i] is not ‘)’,’}’,’]’, then stack.append(s[i]); if s[i] is ‘)’,’}’,’]’, then compare it with stack.pop() — the top element in stack. Concise code speeds the execution…
My ugly solution
1 | class Solution: |
Too many “if” checks slow the solution.
1 | if stack == []: |
This check above for test case without left brackets:
“]”
1 | if dict2[char] == stack[-1]: |
This check above for test case in disorder:
“(])”