欢迎访问宙启技术站
智能推送

Java函数如何检查一个字符串是否为回文

发布时间:2023-06-07 07:23:04

回文是指正着读和反着读都是相同的字符串,比如“level”、“racecar”等等。在Java中如何检查一个字符串是否为回文呢?

方法一:逆序判断法

首先,我们可以使用Java自带的StringBuilder类将字符串反转过来,然后和原字符串比较是否相等,如果相等则说明这个字符串是回文。

下面是实现代码:

public static boolean isPalindrome(String str) {
    StringBuilder sb = new StringBuilder(str);
    sb.reverse();
    return sb.toString().equals(str);
}

这段代码先创建一个StringBuilder对象,调用reverse()方法将字符串倒序,然后调用toString()方法将StringBuilder对象转换为字符串,最后和原字符串进行比较。

方法二:递归判断法

其次,我们可以使用递归的方法判断字符串是否为回文。具体思路如下:

先判断字符串的长度是否小于等于1,是的话说明这个字符串是回文;否则,判断字符串的首尾字符是否相等,如果相等则将字符串的首尾字符去除掉,再递归调用判断剩余的字符串是否为回文。

下面是实现代码:

public static boolean isPalindrome(String str) {
    int len = str.length();
    if(len <= 1) {
        return true;
    } else {
        char firstChar = str.charAt(0);
        char lastChar = str.charAt(len - 1);
        if(firstChar != lastChar) {
            return false;
        } else {
            String mid = str.substring(1, len - 1);
            return isPalindrome(mid);
        }
    }
}

这段代码首先获取字符串的长度,如果长度小于等于1则说明这个字符串是回文,直接返回true;否则,获取字符串的首尾字符,如果首尾字符不相等则说明这个字符串不是回文,返回false;如果首尾字符相等,则将字符串的首尾字符去除掉,调用递归函数继续判断剩余的字符串是否为回文。

方法三:双指针法

最后,我们可以使用双指针法判断一个字符串是否为回文。具体思路如下:

创建两个指针left和right,分别指向字符串的开头和结尾。依次比较left和right指向的字符是否相等,如果相等则将left向右移动,将right向左移动,继续比较下一个字符直到left和right相遇。如果比较过程中发现了不相等的字符,则说明这个字符串不是回文。

下面是实现代码:

public static boolean isPalindrome(String str) {
    int left = 0;
    int right = str.length() - 1;
    while(left < right) {
        if(str.charAt(left) != str.charAt(right)) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

这段代码创建了两个指针left和right,通过while循环依次比较left和right指向的字符是否相等,如果不相等则直接返回false,否则将left向右移动,将right向左移动,继续比较下一个字符。如果left和right相遇,则说明这个字符串是回文,返回true。

总结

以上三种方法都可以用来判断一个字符串是否为回文,其中逆序判断法代码最简单,递归判断法代码稍微复杂一些,双指针法代码最短,但需要多一点指针的维护,具体应该根据实际情况选择合适的方法。