这是我尝试过的代码
public String isPalindrome(String s) {
String trimmed = s.replaceAll("[^A-Za-z0-9]", "");
String reversed = "";
int len = trimmed.length();
for (int i = len - 1; i >= 0; i--) {
char[] allChars = trimmed.toCharArray();
reversed += allChars[i];
}
if (trimmed.equalsIgnoreCase(reversed)) {
return "true";
} else {
return "false";
}
}一个人,一个计划,一个运河:巴拿马
样本输出1真
当只考虑字母数字字符时,给定的字符串是回文。
样本输入2赛车
样本输出2假
当考虑字母数字字符时,给定的字符串不是回文。
发布于 2022-12-03 15:49:29
变量len来自字符串s的长度。但是您使用来自trimmed的数组的值。
因此,如果要删除IndexOutOfBoundsException,则应将len声明更改为:
int len = trimmed.length();
发布于 2022-12-03 15:40:17
您可以返回boolean而不是String
public static boolean isPalindrome(String s) {
String trimmed = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
int from = 0, to = trimmed.length() - 1;
while (from < to) {
if (trimmed.charAt(from) != trimmed.charAt(to)) {
return false;
}
from++;
to--;
}
return true;
}发布于 2022-12-03 15:44:59
您可以使用StringBuilder反转字符串:
public static void main(String[] args) {
String input = "a#b!b^a";
String clean = input.replaceAll("[^A-Za-z0-9]", "");
String reverse = new StringBuilder(clean).reverse().toString();
boolean isPalindrome = reverse.equals(clean);
System.out.println(isPalindrome);
}https://stackoverflow.com/questions/74668064
复制相似问题