欢迎访问原文所在博客:https://52heartz.top/articles/leetcode-125-valid-palindrome/
解答1[Java]:
class Solution {
private static final char[] charMap = new char[256];
static {
for (int i = 0; i < 10; i++) {
charMap[i + '0'] = (char) (1 + i); // numeric
}
for (int i = 0; i < 26; i++) {
charMap[i + 'a'] = charMap[i + 'A'] = (char) (11 + i); // alphabetic, ignore cases
}
}
public boolean isPalindrome(String s) {
char[] pChars = s.toCharArray();
int start = 0, end = pChars.length - 1;
char cS, cE;
while (start < end) {
cS = charMap[pChars[start]];
cE = charMap[pChars[end]];
if (cS != 0 && cE != 0) {
if (cS != cE)
return false;
start++;
end--;
} else {
if (cS == 0)
start++;
if (cE == 0)
end--;
}
}
return true;
}
}
思路
先打一个表。注意通过 charMap['A']
这种方式访问数组的时候,会自动把字符转换为 int
型。
解答2[Java]:
public class Solution {
public boolean isPalindrome(String s) {
String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
String rev = new StringBuffer(actual).reverse().toString();
return actual.equals(rev);
}
}
使用正则表达式和 Java 的类库。