Skip to content

Commit 15d4682

Browse files
committed
valid palindrome solution
1 parent 132163f commit 15d4682

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

valid-palindrome/Yn3-3xh.java

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
[문제풀이]
3+
- 대문자 -> 소문자 변환
4+
- 소문자가 아닌 문자면 넘어가고, 소문자만 체크
5+
- 숫자는 넘어갈 수 없다.
6+
- 소문자 input, reverse input 비교
7+
8+
- 풀이1
9+
time: O(N), space: O(1)
10+
class Solution {
11+
public boolean isPalindrome(String s) {
12+
if (s.trim().length() == 0) {
13+
return true;
14+
}
15+
16+
s = s.toLowerCase();
17+
int left = 0;
18+
int right = s.length() - 1;
19+
while (left < right) {
20+
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
21+
left++;
22+
}
23+
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
24+
right--;
25+
}
26+
27+
if (s.charAt(left) != s.charAt(right)) {
28+
return false;
29+
}
30+
left++;
31+
right--;
32+
}
33+
return true;
34+
}
35+
}
36+
37+
- 풀이2
38+
time: O(N), space: O(1)
39+
40+
[회고]
41+
중간에 공백을 replace하면 안좋을 것 같은데..
42+
-> 알파벳인지를 비교해서 인덱스를 바꾸자!
43+
44+
for문만 고집하지 말고, while문도 사용해보자!
45+
(처음에 for문으로 풀다가 스파게티가 되어버렸ㄷ..)
46+
47+
!!! String.toLowerCase() 로 소문자로 변환하는 것이 좋은 방법일까?? !!!
48+
*/
49+
50+
class Solution {
51+
public boolean isPalindrome(String s) {
52+
s = s.toLowerCase();
53+
int left = 0;
54+
int right = s.length() - 1;
55+
while (left < right) {
56+
if (!Character.isLetterOrDigit(s.charAt(left))) {
57+
left++;
58+
continue;
59+
}
60+
if (!Character.isLetterOrDigit(s.charAt(right))) {
61+
right--;
62+
continue;
63+
}
64+
65+
if (s.charAt(left) != s.charAt(right)) {
66+
return false;
67+
}
68+
left++;
69+
right--;
70+
}
71+
return true;
72+
}
73+
}

0 commit comments

Comments
 (0)