-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidParentheses.js
More file actions
61 lines (57 loc) · 1.49 KB
/
validParentheses.js
File metadata and controls
61 lines (57 loc) · 1.49 KB
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
/*
* 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
*/
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if (s.length === 0) return true;
if (s.length % 2 !== 0) return false;
let map = {"}": "{", "]": "[", ")": "("};
let stack = [];
for(let ii=0;ii<s.length;ii++){
let char = s[ii];
// if char is in map, it means it is ), }, or ]
if (map[char]){
let tailOpenChar = stack.pop();
if (tailOpenChar !== map[char]){
return false;
}
} else {
// if char is not in map it means it is (, [, or {
stack.push(char);
}
}
/* if all chars have been iterated over, the stack should've been empty, since everytime a
* perenthesis is closed the stack is popped. if the stack is not empty it means ther are * perenthesis that are not closed, i.e. "(("
*/
return stack.length === 0;
};