题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
思路
先将输入的字符串都转为小写;
再将符合条件(属于字母或数字)的字符存入一个新的字符串中;
翻转字符串判断原串与翻转后的串是否相同。
实现
public static boolean isPalindrome(String s) {
if (s == null || "".equals(s)) {
return true;
}
s = s.toLowerCase();
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ('a' <= c && c <= 'z' || '0' <= c && c <= '9') {
str.append(c);
}
}
return str.toString().equals(str.reverse().toString());
}
public static boolean isPalindrome(String s) {
if (s == null) {
return true;
}
if (s.length() <= 1) {
return true;
}
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ('A' <= c && c <= 'Z') {
c = (char) ((int) c + 32);
}
if ('a' <= c && c <= 'z' || '0' <= c && c <= '9') {
str.append(c);
}
}
if (str.length() == 0) {
return true;
}
for (int i = 0, j = str.length() - 1; i < j; i++, j--) {
if (str.charAt(i) != str.charAt(j)) {
return false;
}
}
return true;
}
public static boolean isPalindrome(String s) {
if (s == null) {
return true;
}
if (s.length() <= 1) {
return true;
}
for (int i = 0, j = s.length() - 1; i < j;) {
char cLeft = s.charAt(i);
char cRight = s.charAt(j);
if ('A' <= cLeft && cLeft <= 'Z') {
cLeft = (char) ((int) cLeft + 32);
}
if ('A' <= cRight && cRight <= 'Z') {
cRight = (char) ((int) cRight + 32);
}
if (!('a' <= cLeft && cLeft <= 'z' || '0' <= cLeft && cLeft <= '9')) {
i++;
continue;
}
if (!('a' <= cRight && cRight <= 'z' || '0' <= cRight && cRight <= '9')) {
j--;
continue;
}
if (cLeft != cRight) {
return false;
}
i++;
j--;
}
return true;
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome