-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathvalid_parentheses.go
63 lines (50 loc) · 1.14 KB
/
valid_parentheses.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
20. Valid Parentheses
Source: https://leetcode.com/problems/valid-parentheses/
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
1. Open brackets must be closed by the same type of brackets.
2. 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
*/
package validparentheses
// Time complexity: O(n)
// Space complexity: O(n)
func isValid(s string) bool {
var (
stacks []rune
mapping = map[rune]rune{')': '(', ']': '[', '}': '{'}
)
for _, char := range s {
if char == ')' || char == '}' || char == ']' {
var topElement rune
if len(stacks) > 0 {
topElement = stacks[len(stacks)-1]
stacks = stacks[:len(stacks)-1]
} else {
topElement = '#'
}
if mapping[char] != topElement {
return false
}
} else {
stacks = append(stacks, char)
}
}
return len(stacks) == 0
}