java 如何判断回文
判断字符串是否为回文的方法
回文是指正读和反读都相同的字符串。在Java中,可以通过多种方法判断一个字符串是否为回文。
方法一:使用双指针法
双指针法是一种高效的方法,通过从字符串的两端向中间遍历,比较字符是否相同。
public static boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
方法二:反转字符串后比较
将字符串反转后与原字符串比较,如果相同则为回文。
public static boolean isPalindrome(String s) {
String reversed = new StringBuilder(s).reverse().toString();
return s.equals(reversed);
}
方法三:递归法
通过递归的方式比较字符串的首尾字符,逐步缩小范围。
public static boolean isPalindrome(String s, int left, int right) {
if (left >= right) {
return true;
}
if (s.charAt(left) != s.charAt(right)) {
return false;
}
return isPalindrome(s, left + 1, right - 1);
}
方法四:忽略大小写和非字母数字字符
在实际应用中,可能需要忽略大小写和非字母数字字符。

public static boolean isPalindrome(String s) {
s = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
注意事项
- 方法一和方法二的时间复杂度为O(n),空间复杂度为O(1)。
- 方法三的时间复杂度为O(n),空间复杂度为O(n)(递归栈空间)。
- 方法四适用于处理包含非字母数字字符的字符串,但会引入额外的预处理时间。
根据具体需求选择合适的方法。






