Skip to content

Commit c5626d3

Browse files
committed
solve: valid-palindrome
1 parent 783ff8a commit c5626d3

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

valid-palindrome/ready-oun.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
public boolean isPalindrome(String s) {
3+
StringBuilder cleaned = new StringBuilder();
4+
5+
for (char c : s.toCharArray()) {
6+
if (Character.isLetterOrDigit(c)) {
7+
cleaned.append(Character.toLowerCase(c));
8+
}
9+
}
10+
11+
int left = 0;
12+
int right = cleaned.length() - 1;
13+
while (left < right) {
14+
// Fail fast: return false as soon as a mismatch is found
15+
if (cleaned.charAt(left) != cleaned.charAt(right)) {
16+
return false;
17+
}
18+
left++;
19+
right--;
20+
}
21+
22+
return true;
23+
}
24+
}
25+
26+
/**
27+
converting all uppercase letters into lowercase letters
28+
removing all non-alphanumeric char
29+
30+
1. cleaning
31+
0. str -> char with for-each loop
32+
1. check char if isLetterOrDigit
33+
2. make char to LowerCase
34+
* Character Class static method
35+
2. two ptrs comparison while left < right
36+
s[i] == s[n - 1 - i]
37+
38+
- Time: O(n)
39+
40+
/** REMEMBER
41+
1. length vs length()
42+
43+
arr.length => field
44+
String(Builder).length() => method
45+
46+
2. “fail fast” approach:
47+
As soon as we detect something wrong, we exit early.
48+
*/

0 commit comments

Comments
 (0)