125. 验证回文串
将非ASCII字符去掉,再反转对比
执行用时:4 ms, 在所有 Java 提交中击败了64.90%的用户 内存消耗:38.6 MB, 在所有 Java 提交中击败了51.04%的用户
class Solution {
public boolean isPalindrome(String s) {
StringBuilder stringBuilder = new StringBuilder();
for (char c :s.toCharArray()){
if (Character.isLetterOrDigit(c)) {
stringBuilder.append(Character.toLowerCase(c));
}
}
String originalStr = stringBuilder.toString();
String reverseStr = stringBuilder.reverse().toString();
return originalStr.equals(reverseStr);
}
}
将非ASCII字符去掉,再用双指针对比
执行用时:5 ms, 在所有 Java 提交中击败了46.01%的用户 内存消耗:38.5 MB, 在所有 Java 提交中击败了57.19%的用户
class Solution {
public boolean isPalindrome(String s) {
StringBuilder stringBuilder = new StringBuilder();
for (char c :s.toCharArray()){
if (Character.isLetterOrDigit(c)) {
stringBuilder.append(Character.toLowerCase(c));
}
}
for (int i = 0; i < stringBuilder.length() / 2; i++) {
if (stringBuilder.charAt(i) != stringBuilder.charAt(stringBuilder.length() - i - 1)) {
return false;
}
}
return true;
}
}
直接在原字符串操作
执行用时:3 ms, 在所有 Java 提交中击败了93.23%的用户 内存消耗:38.5 MB, 在所有 Java 提交中击败了70.80%的用户
class Solution {
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
left ++;
}
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
right --;
}
if (left < right) {
if (Character.toLowerCase(s.charAt(left ++)) != Character.toLowerCase(s.charAt(right --))) {
return false;
}
}
}
return true;
}
}