Skip to content

Commit e434df6

Browse files
committed
valid palindrome solution
1 parent 9c8fe48 commit e434df6

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

โ€Žvalid-palindrome/smosco.jsโ€Ž

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* ํ•ต์‹ฌ ์•„์ด๋””์–ด:
3+
* 1. ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ์ถ”์ถœํ•˜์—ฌ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
4+
* 2. Two Pointer ๋ฐฉ์‹์œผ๋กœ ์–‘ ๋์—์„œ ์ค‘์•™์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ๋น„๊ต
5+
*
6+
* @param {string} s - ๊ฒ€์‚ฌํ•  ๋ฌธ์ž์—ด
7+
* @return {boolean} - ํŒฐ๋ฆฐ๋“œ๋กฌ ์—ฌ๋ถ€
8+
*
9+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
10+
* - replace() ๋ฉ”์„œ๋“œ: O(n) - ๋ฌธ์ž์—ด ์ „์ฒด ์ˆœํšŒ
11+
* - toLowerCase(): O(n) - cleaned ๋ฌธ์ž์—ด ์ˆœํšŒ
12+
* - while ๋ฃจํ”„: O(n/2) โ†’ O(n) - ์ตœ๋Œ€ ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ์ ˆ๋ฐ˜๋งŒํผ ๋ฐ˜๋ณต
13+
* - ์ „์ฒด: O(n) + O(n) + O(n) = O(n)
14+
*
15+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
16+
* - cleaned ๋ฌธ์ž์—ด: O(n) - ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ ๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ/์ˆซ์ž
17+
* - left, right ํฌ์ธํ„ฐ ๋ณ€์ˆ˜: O(1)
18+
* - ์ „์ฒด: O(n)
19+
*/
20+
const isPalindrome = (s) => {
21+
// ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ ๋‚จ๊ธฐ๊ณ  ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
22+
// \W๋Š” ์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž
23+
// _๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ [^a-zA-Z0-9] ์‚ฌ์šฉ
24+
const cleaned = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
25+
26+
// Two Pointer ์ ‘๊ทผ๋ฒ•
27+
let left = 0;
28+
let right = cleaned.length - 1;
29+
30+
// ์–‘ ๋์—์„œ ์ค‘์•™์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ๋น„๊ต
31+
while (left < right) {
32+
if (cleaned[left] !== cleaned[right]) {
33+
return false;
34+
}
35+
left++;
36+
right--;
37+
}
38+
39+
return true;
40+
};

0 commit comments

Comments
ย (0)