Skip to content

Commit 9aaee2e

Browse files
committed
add Valid Palindrome solution
1 parent bb2c0d2 commit 9aaee2e

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

valid-palindrome/HoonDongKang.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* [Problem]: [125] Valid Palindrome
3+
*
4+
* (https://leetcode.com/problems/valid-palindrome/description/)
5+
*/
6+
7+
function isPalindrome(s: string): boolean {
8+
// 시간복잡도: O(n)
9+
// 공간복잡도: O(n)
10+
function twoPointerFunc(s: string): boolean {
11+
let stringArr: string[] = [...s.replace(/[^a-zA-Z0-9]/g, "")];
12+
let left = 0;
13+
let right = stringArr.length - 1;
14+
15+
while (left < right) {
16+
if (stringArr[left].toLowerCase() === stringArr[right].toLowerCase()) {
17+
left++;
18+
right--;
19+
} else {
20+
return false;
21+
}
22+
}
23+
24+
return true;
25+
}
26+
27+
// 시간복잡도: O(n)
28+
// 공간복잡도: O(1)
29+
function optimizedTwoPointerFunc(s: string): boolean {
30+
let left = 0;
31+
let right = s.length - 1;
32+
33+
while (left < right) {
34+
while (left < right && !isLetterOrDigit(s[left])) left++;
35+
while (left < right && !isLetterOrDigit(s[right])) right--;
36+
37+
if (s[left].toLowerCase() !== s[right].toLowerCase()) return false;
38+
left++;
39+
right--;
40+
}
41+
42+
return true;
43+
44+
function isLetterOrDigit(c: string): boolean {
45+
return /[a-zA-Z0-9]/.test(c);
46+
}
47+
}
48+
return optimizedTwoPointerFunc(s);
49+
}

0 commit comments

Comments
 (0)