1+ /**
2+ * @param {string } s
3+ * @return {boolean }
4+ */
5+
6+ String . prototype . isAlphaNum = function ( ) {
7+ return / ^ [ a - z 0 - 9 ] $ / i. test ( this ) ;
8+ } ;
9+ var isPalindrome = function ( s ) {
10+ //chatAt์ ๋ฒ์์ string, number๋ง ๊ฑด์ง๋ค
11+ const ss = s . split ( '' ) . filter ( ( x ) => x . isAlphaNum ( ) ) . map ( x => x . toLowerCase ( ) )
12+ //๊ทธ ๋ค์์ index๋ฅผ ์์ชฝ์์ ๋น๊ตํ๊ธฐ
13+ for ( let i = 0 ; i < ( ss . length / 2 ) ; i ++ ) {
14+ console . log ( ss [ i ] , ss [ ss . length - 1 - i ] )
15+ if ( ss [ i ] !== ss [ ss . length - 1 - i ] ) return false
16+ }
17+ return true
18+ } ;
19+
20+ // ์๊ฐ ๋ณต์ก๋ O(N)
21+ // ๊ณต๊ฐ ๋ณต์ก๋ O(N)
22+
23+ //2. ํฌํฌ์ธํฐ ๋ฐฉ์์ผ๋ก, ํํฐ๋ง๊ณผ string ๋ฉ์๋๋ฅผ ๊ทธ๋๋ง๋ค ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํจ์จ์ฑ ์ฌ๋ฆฌ๊ธฐ
24+ var isPalindrome = function ( s ) {
25+ let left = 0 ;
26+ let right = s . length - 1 ;
27+ //๊ฐ ํฌ์ธํฐ๊ฐ ์์ซ์ ๋ฌธ์๋ฅผ ๋ง๋ ๋๊น์ง ์ด๋
28+ while ( left < right ) {
29+ while ( left < right && ! s [ left ] . isAlphaNum ( ) ) {
30+ left ++ ;
31+ }
32+ while ( left < right && ! s [ right ] . isAlphaNum ( ) ) {
33+ right -- ;
34+ }
35+ if ( left < right && s [ left ] . toLowerCase ( ) !== s [ right ] . toLowerCase ( ) ) {
36+ return false ;
37+ }
38+ left ++ ;
39+ right -- ;
40+ }
41+
42+ return true ;
43+ } ;
44+
45+ // ์๊ฐ ๋ณต์ก๋ O(N)
46+ // ๊ณต๊ฐ ๋ณต์ก๋ O(1)
47+
48+ /*
49+ ๋ ํจ์จ์ ์ด๊ฒ ํธ๋ ๋ฐฉ๋ฒ
50+ 1. String.prototype ํ์ฅ ์ง์
51+ ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์ String.prototype ๋ฉ์๋ ํธ์ถ์ด ์ง์ ์ ์ธ ํฌํผ ํจ์ ํธ์ถ๋ณด๋ค ์์ฃผ ๋ฏธ์ธํ๊ฒ ์ค๋ฒํค๋๊ฐ ์์ ์ ์๋ค (์ค์ ๋ก๋ ๊ฑฐ์ ๋ฌด์ํ ์ ์๋ ์์ค)
52+
53+ 2. isAlphaNum ๋ด๋ถ ๋ก์ง ์ต์ ํ (Micro-optimization)
54+ - ์ ๊ท ํํ์ ์์ง์ด ๋ด๋ถ์ ์ผ๋ก ํ์ฑ๋๊ณ ์ปดํ์ผ๋๋ ์ค๋ฒํค๋๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ ๊ท ํํ์, ๋จ์ํ ๋ฌธ์ ๋ฒ์ ์ฒดํฌ์๋ ๋ฌธ์ ์ฝ๋(char code) ๋น๊ต๊ฐ ๋ ๋น ๋ฅผ ์ ์๋ค.
55+
56+ */
0 commit comments