File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+
3
+ /**
4
+ * 런타임 231ms
5
+ * [생각]
6
+ * for문으로 알파벳, 숫자를 제외한 특수문자들을 제거한 후에 투 포인터 알고리즘으로 풀이하자.
7
+ */
8
+ public boolean isPalindrome (String s ) {
9
+ StringBuilder sb = new StringBuilder ();
10
+ for (char c : s .toCharArray ()) {
11
+ if (Character .isDigit (c )) {
12
+ sb .append (c );
13
+ }
14
+ if (Character .isAlphabetic (c )) {
15
+ sb .append (Character .toLowerCase (c ));
16
+ }
17
+ }
18
+
19
+ int left = 0 ;
20
+ int right = sb .toString ().length () - 1 ;
21
+
22
+ while (left <= right ) {
23
+ if (sb .toString ().charAt (left ) != sb .toString ().charAt (right )) {
24
+ return false ;
25
+ }
26
+ left ++;
27
+ right --;
28
+ }
29
+ return true ;
30
+ }
31
+
32
+ /**
33
+ * 런타임 7ms
34
+ * [생각]
35
+ * 굳이 투 포인터로? 이미 활용중인 StringBuilder를 reverse()본과 원본을 비교하면 탐색 필요없다.
36
+ * 또한 " " 케이스는 사전에 리턴처리한다.
37
+ */
38
+ public boolean isPalindrome2 (String s ) {
39
+ if (s .equals (" " ))
40
+ return true ;
41
+
42
+ StringBuilder sb = new StringBuilder ();
43
+ for (char c : s .toCharArray ()) {
44
+ if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || Character .isDigit (c )) {
45
+ sb .append (Character .toLowerCase (c ));
46
+ }
47
+ }
48
+ return sb .toString ().equals (sb .reverse ().toString ());
49
+ }
50
+ }
You can’t perform that action at this time.
0 commit comments