Skip to content

Commit 57b75b0

Browse files
committed
add: Valid Palindrome solution
1 parent 3921610 commit 57b75b0

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// [125] Valid Palindrome
2+
3+
/**
4+
* Solution 1. ๋ฌธ์ž์—ด ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ๋น„๊ตํ•˜๊ธฐ
5+
*
6+
* [Idea]
7+
* ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์„œ ํ’€์—ˆ๋‹ค.
8+
* ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค์— Alphanumeric character๋งŒ ๋‚จ๊ธด cleaned ๋ฌธ์ž์—ด๊ณผ
9+
* cleaned ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์€ reversed ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด์„œ
10+
* ๋‘˜์ด ๋น„๊ตํ•ด์„œ ๊ฐ™์œผ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ, ์•„๋‹ˆ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.
11+
*
12+
* [Time Complexity]
13+
* ๋ฌธ์ž์—ด์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •์—์„œ s์˜ ๊ธธ์ด๋งŒํผ ์ƒ์ˆ˜ ๋ฒˆ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
14+
*
15+
* [Space Complexity]
16+
* reversed ๋ฌธ์ž์—ด์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ €์žฅํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)
17+
*
18+
*/
19+
function isPalindrome1(s: string): boolean {
20+
// replace: ์†Œ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๊ณ  ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ๋ชจ๋‘ ''์œผ๋กœ ์น˜ํ™˜(์ œ๊ฑฐ)ํ•œ๋‹ค.
21+
const cleaned = s.toLowerCase().replace(/[^a-z0-9]/g, "");
22+
// string์—๋Š” reverse ๋‚ด์žฅํ•จ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ, string -> array -> reverse -> string (join) ๊ณผ์ •์œผ๋กœ ๋’ค์ง‘๋Š”๋‹ค.
23+
const reversed = cleaned.split("").reverse().join("");
24+
25+
return cleaned === reversed;
26+
}
27+
28+
/**
29+
* Solution 2. ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ
30+
* [Idea]
31+
* ๋ฌธ์ž์—ด์„ ๊ฐ€๊ณตํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ถ”๊ฐ€์ ์ธ ์ˆœํšŒ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  reversed๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฐฉ๋ฒ•
32+
* s์˜ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์„ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
33+
* 1. ์•ŒํŒŒ๋ฒณ(์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋Œ€์†Œ๋ฌธ์ž ๋ชจ๋‘) ๋˜๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•œ๋‹ค (ํฌ์ธํ„ฐ ์ด๋™)
34+
* 2. ํ˜„์žฌ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ์•ŒํŒŒ๋ฒณ์ด ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ ๊ฐ™์ง€ ์•Š์œผ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์•„๋‹ˆ๋‹ค.
35+
* 3. ์•ŒํŒŒ๋ฒณ์ด ๊ฐ™๋‹ค๋ฉด ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ธํ„ฐ๋ฅผ ์˜ฎ๊ธด๋‹ค.
36+
*
37+
* [Time Complexity]
38+
* Solution 1๊ณผ ๋™์ผํ•˜๊ฒŒ O(n)์ด์ง€๋งŒ s๋ฅผ 1๋ฒˆ๋งŒ ์ˆœํšŒํ•œ๋‹ค
39+
*
40+
* [Space Complexity]
41+
* left, right ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•  ์ƒ์ˆ˜ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.
42+
*/
43+
function isPalindrome2(s: string): boolean {
44+
let left = 0,
45+
right = s.length - 1;
46+
47+
while (left < right) {
48+
while (left < right && s[left].match(/[^A-Za-z0-9]/)) {
49+
left++;
50+
}
51+
while (left < right && s[right].match(/[^A-Za-z0-9]/)) {
52+
right--;
53+
}
54+
if (s[left].toLowerCase() !== s[right].toLowerCase()) {
55+
return false;
56+
}
57+
left++;
58+
right--;
59+
}
60+
61+
return true;
62+
}

0 commit comments

Comments
ย (0)