Valid Palindrome
/*
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.
*/
class Solution {
// Time complexity: O(N)
public boolean isPalindrome(String s) {
Deque<Character> deque = new ArrayDeque<>();
s = s.toLowerCase();
for (char c: s.toCharArray()) {
if (isDigitOrCharacter(c)) {
deque.offer(c);
}
}
while (deque.size() >= 2) {
int first = deque.pollFirst();
int last = deque.pollLast();
if (first != last) {
return false;
}
}
return deque.size() <= 1;
}
private boolean isDigitOrCharacter(char c) {
return (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
}
}
Last updated