@@ -5,45 +5,50 @@ public boolean isPalindrome(String s) {
5
5
// 영문자와 숫자만 남기고 모두 제거
6
6
// 앞뒤로 읽어도 같은 경우 팰린드롬
7
7
// 종류 별 처리 방법
8
- // 영어 대문자: 소문자로 변환
9
8
// 공백: 무시
10
9
// 소문자, 숫자: 통과
11
10
// 그 외: 무시
12
11
// 종료 조건: 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 ;
16
15
17
- var input = s .toCharArray ();
16
+ char charLt ;
17
+ char charRt ;
18
18
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 );
24
22
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 );
28
27
}
29
28
30
29
// 영문 또는 숫자일때까지 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 );
33
33
}
34
34
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
+ }
39
44
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
+ }
43
48
}
44
49
45
- lt ++;
46
- rt --;
50
+ idxLt ++;
51
+ idxRt --;
47
52
}
48
53
49
54
return true ;
0 commit comments