📜  java中的回文(1)

📅  最后修改于: 2023-12-03 15:16:31.927000             🧑  作者: Mango

Java中的回文

回文是一个字符串,它从左往右和从右往左读取是一样的。在Java中,检测一个字符串是否为回文非常容易,并有多种实现方法。

利用StringBuilder反转字符串

我们可以使用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中检测回文字符串的方法有很多种,我们可以采用递归、栈、双指针等方法。无论哪种方法,都可以快速地检测一个字符串是否为回文。在实际工作中,也需要考虑到字符串大小写敏感和特殊字符的问题。