Skip to content

Commit 3fc20a0

Browse files
committed
풀이2: 공간 복잡도O(n) -> O(1) Valid Palindrome DaleStudy#220
1 parent 56f96eb commit 3fc20a0

File tree

1 file changed

+46
-10
lines changed

1 file changed

+46
-10
lines changed

valid-palindrome/seungseung88.js

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,61 @@
11
/**
2-
* @param {string} s
3-
* @return {boolean}
2+
* 시간 복잡도: O(n)
3+
* 공간 복잡도: O(n)
44
*/
5-
var isPalindrome = function (s) {
6-
// 숫자와 문자만 추출하는 정규식
7-
const REGEX = /[0-9a-zA-Z]/g;
5+
// var isPalindrome = function (s) {
6+
// // 숫자와 문자만 추출하는 정규식
7+
// const REGEX = /[0-9a-zA-Z]/g;
8+
9+
// const wordArr = s.match(REGEX);
10+
11+
// // 문자가 비어있으면 true반환
12+
// if (!wordArr) return true;
13+
14+
// let l = 0;
15+
// let r = wordArr.length - 1;
16+
17+
// while (l < r) {
18+
// if (wordArr[l].toLocaleLowerCase() !== wordArr[r].toLocaleLowerCase()) return false;
19+
// console.log(l, r);
20+
// l += 1;
21+
// r -= 1;
22+
// }
823

9-
const wordArr = s.match(REGEX);
24+
// return true;
25+
// };
1026

11-
// 문자가 비어있으면 true반환
12-
if (!wordArr) return true;
27+
/**
28+
* 시간 복잡도: O(n)
29+
* 공간 복잡도: 1
30+
*/
31+
var isPalindrome = function (s) {
32+
// 숫자와 문자만 추출하는 정규식
33+
const isAlnum = (char) =>
34+
(char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9');
1335

1436
let l = 0;
15-
let r = wordArr.length - 1;
37+
let r = s.length - 1;
1638

1739
while (l < r) {
18-
if (wordArr[l].toLocaleLowerCase() !== wordArr[r].toLocaleLowerCase()) return false;
1940
console.log(l, r);
41+
if (!isalnum.test(s[l])) {
42+
l += 1;
43+
continue;
44+
}
45+
if (!isalnum.test(s[r])) {
46+
r -= 1;
47+
continue;
48+
}
49+
if (s[l].toLowerCase() !== s[r].toLowerCase()) {
50+
return false;
51+
}
2052
l += 1;
2153
r -= 1;
2254
}
2355

2456
return true;
2557
};
58+
59+
const s = 'A man, a plan, a canal: Panama';
60+
61+
console.log(isPalindrome(s));

0 commit comments

Comments
 (0)