📅  最后修改于: 2023-12-03 15:16:31.927000             🧑  作者: Mango
回文是一个字符串,它从左往右和从右往左读取是一样的。在Java中,检测一个字符串是否为回文非常容易,并有多种实现方法。
我们可以使用Java中的StringBuilder类将字符串反转,然后将反转后的字符串与原字符串进行比较。如果它们相等,那么这个字符串是回文。
public static boolean isPalindrome(String str) {
StringBuilder sb = new StringBuilder(str);
sb.reverse();
return sb.toString().equals(str);
}
我们可以使用递归的方法检测一个字符串是否为回文。我们将一个字符串的第一个和最后一个字符进行比较,如果它们相同,我们会将字符串缩小为少一个字符的子字符串,然后继续比较子字符串的首尾字符。
public static boolean isPalindrome(String str) {
if (str.length() <= 1) { // 递归终止条件:长度为1或0
return true;
}
if (str.charAt(0) != str.charAt(str.length() - 1)) {
return false;
}
return isPalindrome(str.substring(1, str.length() - 1)); //递归调用
}
我们可以将字符串的每个字符依次入栈,然后再出栈比较字符,如果它们相等,那么这个字符串是回文。注意,为了支持比较大小写不敏感的回文,我们需要将所有的字符转换成小写。
public static boolean isPalindrome(String str) {
char[] chars = str.toLowerCase().toCharArray(); // 转换为小写
Stack<Character> stack = new Stack<>();
for (char c : chars) {
stack.push(c);
}
for (char c : chars) {
if (c != stack.pop()) {
return false;
}
}
return true;
}
我们可以使用双指针的方法检测一个字符串是否为回文。我们用两个指针,一个指向字符串的起始位置,一个指向字符串的末尾位置,每次判断两个指针所指向的字符是否相同,如果不同,那么这个字符串不是回文。每判断一次,就将指针向中间缩小。
public static boolean isPalindrome(String str) {
char[] chars = str.toCharArray();
int left = 0;
int right = chars.length - 1;
while (left < right) {
if (chars[left] != chars[right]) {
return false;
}
left++;
right--;
}
return true;
}
Java中检测回文字符串的方法有很多种,我们可以采用递归、栈、双指针等方法。无论哪种方法,都可以快速地检测一个字符串是否为回文。在实际工作中,也需要考虑到字符串大小写敏感和特殊字符的问题。