描述
給定一個(gè)字符串,判斷其是否為一個(gè)回文串。只包含字母和數(shù)字,忽略大小寫。
注意事項(xiàng)
你是否考慮過,字符串有可能是空字符串?這是面試過程中,面試官常常會(huì)問的問題。在這個(gè)題目中,我們將空字符串判定為有效回文。
樣例
"A man, a plan, a canal: Panama" 是一個(gè)回文。
"race a car" 不是一個(gè)回文。
挑戰(zhàn)
O(n) 時(shí)間復(fù)雜度,且不占用額外空間。
思路
題目需要過濾掉除字母和數(shù)字外的字符,還要用Character.toLowerCase()進(jìn)行大小寫轉(zhuǎn)換
代碼
public class Solution {
/*
* @param s: A string
* @return: Whether the string is a valid palindrome
*/
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
int left = 0;
int right = s.length() - 1;
char[] string = s.toCharArray();
while (left < right) {
while (left < right && !isValue(string[left])) {
left++;
}
while (left < right && !isValue(string[right])) {
right--;
}
if (Character.toLowerCase(string[left]) !=
Character.toLowerCase(string[right])) {
return false;
}
left++;
right--;
}
return true;
}
private boolean isValue(char c) {
return Character.isLetter(c) || Character.isDigit(c);
}
}