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

Java函数实现:判断一个字符串是否为回文

发布时间:2023-06-19 09:07:02

回文是指正着读和倒着读都一样的字符串。例如,"level"、"racecar"、"madam"等都是回文。在Java中实现一个函数,判断一个字符串是否为回文是一个常见的面试题。

算法思路:

判断一个字符串是否为回文,可以采用双指针的方法。定义两个指针,分别指向字符串的首尾字符。依次比较两个指针指向的字符是否相等,如果相等,则将指针向中间移动;如果不相等,直接返回false。当两个指针相遇时,说明字符串是回文,返回true。具体实现如下:

public static boolean isPalindrome(String s) {

    if (s == null || s.isEmpty()) {

        return true;

    }

    s = s.toLowerCase(); // 转换为小写字母

    int left = 0, right = s.length() - 1;

    while (left < right) {

        char l = s.charAt(left);

        char r = s.charAt(right);

        if (!Character.isLetterOrDigit(l)) {

            left++;

        } else if (!Character.isLetterOrDigit(r)) {

            right--;

        } else if (l != r) {

            return false;

        } else {

            left++;

            right--;

        }

    }

    return true;

}

首先,判断字符串是否为空。如果为空,那么字符串本身就是回文。接着,将字符串转换为小写字母,方便进行比较。

定义两个指针left和right,分别指向字符串的首尾字符。while循环目的是依次比较两个指针指向的字符是否相等,直到两个指针相遇。在每次比较的时候,先判断是否是字母或数字,如果不是,则跳过该字符。如果两个字符不相等,直接返回false。如果相等,将指针向中间移动。

最后,如果循环执行完毕,说明字符串是回文,返回true。

测试样例:

下面给出一些测试样例:

isPalindrome("A man, a plan, a canal: Panama");// true

isPalindrome("race a car"); // false

isPalindrome("madam"); // true

isPalindrome(""); // true

isPalindrome("level"); // true

完整代码如下:

public class Palindrome {

    public static boolean isPalindrome(String s) {

        if (s == null || s.isEmpty()) {

            return true;

        }

        s = s.toLowerCase(); // 转换为小写字母

        int left = 0, right = s.length() - 1;

        while (left < right) {

            char l = s.charAt(left);

            char r = s.charAt(right);

            if (!Character.isLetterOrDigit(l)) {

                left++;

            } else if (!Character.isLetterOrDigit(r)) {

                right--;

            } else if (l != r) {

                return false;

            } else {

                left++;

                right--;

            }

        }

        return true;

    }

    public static void main(String[] args) {

        System.out.println(isPalindrome("A man, a plan, a canal: Panama"));

        System.out.println(isPalindrome("race a car"));

        System.out.println(isPalindrome("madam"));

        System.out.println(isPalindrome(""));

        System.out.println(isPalindrome("level"));

    }

}