File tree Expand file tree Collapse file tree 1 file changed +46
-10
lines changed Expand file tree Collapse file tree 1 file changed +46
-10
lines changed Original file line number Diff line number Diff line change 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 - 9 a - z A - 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 ) ) ;
You can’t perform that action at this time.
0 commit comments