題目地址:
https://www.lintcode.com/problem/valid-palindrome/description
給定一個字符串,只考慮字母和數字,字母忽略大小寫區別,忽略所有其他字符,問該字符串是否迴文。直接對撞雙指針,左指針持續右移直到遇到字母或數字,右指針持續左移直到遇到字母或數字,如果指到的兩個字符忽略大小寫後不等,就直接返回false。循環結束後返回true。
public class Solution {
/**
* @param s: A string
* @return: Whether the string is a valid palindrome
*/
public boolean isPalindrome(String s) {
// write your code here
// 判空
if (s == null || s.isEmpty()) {
return true;
}
// 開兩個變量做左右指針
int i = 0, j = s.length() - 1;
while (i < j) {
// 注意循環的時候一定要保持左右指針沒有交錯過去
while (i < j && !Character.isLetterOrDigit(s.charAt(i))) {
i++;
}
while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
j--;
}
if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) {
return false;
} else {
i++;
j--;
}
}
return true;
}
}
時間複雜度,空間。