@@ -5,45 +5,50 @@ public boolean isPalindrome(String s) {
55 // 영문자와 숫자만 남기고 모두 제거
66 // 앞뒤로 읽어도 같은 경우 팰린드롬
77 // 종류 별 처리 방법
8- // 영어 대문자: 소문자로 변환
98 // 공백: 무시
109 // 소문자, 숫자: 통과
1110 // 그 외: 무시
1211 // 종료 조건: lt >= rt
13- // 시간복잡도: O(N), 공간복잡도: O(N )
14- var lt = 0 ;
15- var rt = s .length () - 1 ;
12+ // 시간복잡도: O(N), 공간복잡도: O(1 )
13+ var idxLt = 0 ;
14+ var idxRt = s .length () - 1 ;
1615
17- var input = s .toCharArray ();
16+ char charLt ;
17+ char charRt ;
1818
19- while (lt < rt ) {
20- // 영문 또는 숫자일때까지 lt++
21- while (!Character .isLetterOrDigit (input [lt ]) && lt < input .length - 1 ) {
22- lt ++;
23- }
19+ while (idxLt < idxRt ) {
20+ charLt = s .charAt (idxLt );
21+ charRt = s .charAt (idxRt );
2422
25- // 대문자면 소문자로 변환
26- if (Character .isUpperCase (input [lt ])) {
27- input [lt ] = Character .toLowerCase (input [lt ]);
23+ // 영문 또는 숫자일때까지 lt++
24+ while (!Character .isLetterOrDigit (charLt ) && idxLt < s .length () - 1 ) {
25+ idxLt ++;
26+ charLt = s .charAt (idxLt );
2827 }
2928
3029 // 영문 또는 숫자일때까지 rt--
31- while (!Character .isLetterOrDigit (input [rt ]) && rt > 0 ) {
32- rt --;
30+ while (!Character .isLetterOrDigit (charRt ) && idxRt > 0 ) {
31+ idxRt --;
32+ charRt = s .charAt (idxRt );
3333 }
3434
35- // 대문자면 소문자로 변환
36- if (Character .isUpperCase (input [rt ])) {
37- input [rt ] = Character .toLowerCase (input [rt ]);
38- }
35+ // 대문자면 소문자로 변환 + lt, rt 범위가 겹쳤거나 lt와 rt 가 다르면 false 반환
36+ if (idxLt < idxRt ) {
37+ if (Character .isUpperCase (charLt )) {
38+ charLt = Character .toLowerCase (charLt );
39+ }
40+
41+ if (Character .isUpperCase (charRt )) {
42+ charRt = Character .toLowerCase (charRt );
43+ }
3944
40- // lt, rt 범위가 겹쳤거나 lt와 rt 가 다르면 false 반환
41- if ( lt < rt && input [ lt ] != input [ rt ]) {
42- return false ;
45+ if ( charLt != charRt ) {
46+ return false ;
47+ }
4348 }
4449
45- lt ++;
46- rt --;
50+ idxLt ++;
51+ idxRt --;
4752 }
4853
4954 return true ;
0 commit comments