题目地址:
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;
}
}
时间复杂度,空间。
来源:CSDN
作者:记录算法
链接:https://blog.csdn.net/qq_46105170/article/details/104373213