Given a string s
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.
Example 1:
Input: s = "()"
Output: true
Example 2:
Input: s = "()[]{}"
Output: true
Example 3:
Input: s = "(]"
Output: false
Example 4:
Input: s = "([)]"
Output: false
Example 5:
Input: s = "{[]}"
Output: true
Constraints:
1 <= s.length <= 104
s
consists of parentheses only '()[]{}'
.
1
2
3
4
5
6
7
8
9
10
11
12
|
class Solution:
def isValid(self, s: str) -> bool:
stack = []
mapping = {')': '(', '}': '{', ']': '['}
for c in s:
if c in mapping:
if not stack or stack[-1] != mapping[c]:
return False
stack.pop()
else:
stack.append(c)
return not stack
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
func isValid(s string) bool {
var stack []byte
for i := 0; i < len(s); i++ {
c := s[i]
if c == '(' || c == '[' || c == '{' {
stack = append(stack, c)
} else if c == ')' && len(stack) > 0 && stack[len(stack)-1] == '(' {
stack = stack[:len(stack)-1]
} else if c == ']' && len(stack) > 0 && stack[len(stack)-1] == '[' {
stack = stack[:len(stack)-1]
} else if c == '}' && len(stack) > 0 && stack[len(stack)-1] == '{' {
stack = stack[:len(stack)-1]
} else {
return false
}
}
return true
}
|