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;}}
