方法一:双指针
思路:
(1)若s为null或空串,则返回true。
(2)将s作小写转换,并去掉其中的非字母数字字符。
(3)双指针,分别从左、右开始向中间判断,一旦左右对称位置的字符不相等,即返回false。
public class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0)
return true;
s = s.toLowerCase();
s = s.replaceAll("[^a-zA-Z0-9]", "");
int len = s.length();
for (int i = 0, j = len - 1; i <= j; i++, j--) {
if (s.charAt(i) != s.charAt(j))
return false;
}
return true;
}
}
Runtime:34ms
方法二:
思路:
(1)若s为null或空串,则返回true。
(2)将s作小写转换,并去掉其中的非字母数字字符。
(3)从两端向中间判断,一旦左右对称位置的字符不相等,即返回false。
public class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0)
return true;
s = s.toLowerCase();
s = s.replaceAll("[^a-zA-Z0-9]", "");
int len = s.length();
for (int i = 0; i < len / 2; i++) {
if (s.charAt(i) != s.charAt(len - i - 1))
return false;
}
return true;
}
}
Runtime:33ms