Skip to content

Commit f600f46

Browse files
committed
Time: 3 ms (69.42%), Space: 58.2 MB (45.4%) - LeetHub
1 parent 02ecea8 commit f600f46

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed
Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
1-
function isValid(s: string): boolean {
2-
const stack = [];
3-
for (let i = 0; i < s.length; i++) {
4-
if (s[i] === '(' || s[i] === '[' || s[i] === '{') {
5-
stack.push(s[i])
1+
const isValid = (s: string): boolean => {
2+
const openBrackets: string[] = [];
3+
const bracketPairs: Record<string, string> = {
4+
')': '(',
5+
']': '[',
6+
'}': '{'
7+
};
8+
9+
for (const char of s) {
10+
const isOpenBracket = char === '(' || char === '[' || char === '{';
11+
12+
if (isOpenBracket) {
13+
openBrackets.push(char);
614
} else {
7-
if (stack.length === 0) {
15+
// Closing bracket with no matching open bracket
16+
if (openBrackets.length === 0) {
17+
return false;
18+
}
19+
20+
const lastOpenBracket = openBrackets.pop()!;
21+
const expectedOpenBracket = bracketPairs[char];
22+
23+
// Mismatched bracket types
24+
if (lastOpenBracket !== expectedOpenBracket) {
825
return false;
926
}
10-
const top = stack.pop();
11-
if (s[i] == ')' && top != '(') return false;
12-
13-
if (s[i] == ']' && top != '[') return false;
14-
15-
if (s[i] == '}' && top != '{') return false;
1627
}
1728
}
18-
19-
return stack.length === 0;
29+
30+
// All brackets must be closed
31+
return openBrackets.length === 0;
2032
};

0 commit comments

Comments
 (0)