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

Java函数:如何判断字符串是否为回文字符串?

发布时间:2023-07-06 15:19:22

判断一个字符串是否为回文字符串,即正序和倒序读取字符串都是相同的。下面介绍几种不同的方法来判断一个字符串是否为回文字符串。

1. 比较正序和倒序的字符串:将字符串逆序,然后比较逆序后的字符串和原字符串是否相等。如果相等,则原字符串是回文字符串,否则不是。

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

2. 使用对撞指针:创建两个指针,分别指向字符串的开头和结尾。依次比较两个指针所指的字符是否相等,如果都相等,则将两个指针向中间移动;如果有一个不相等,则字符串不是回文字符串。

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;
}

3. 使用递归:递归方法是不断判断字符串的 个字符和最后一个字符是否相等,如果相等,则递归判断去掉首尾字符的字符串是否为回文字符串;如果不相等,则字符串不是回文字符串。当字符串的长度为0或1时,认为是回文字符串。

public static boolean isPalindrome(String str) {
    if (str.length() <= 1) {
        return true;
    }
    if (str.charAt(0) != str.charAt(str.length() - 1)) {
        return false;
    }
    return isPalindrome(str.substring(1, str.length() - 1));
}

4. 利用栈的特性:将字符串逐个字符入栈,然后再逐个字符出栈,出栈的字符即为字符串的逆序。最后比较两个字符串是否相等,如果相等,则原字符串是回文字符串,否则不是。

import java.util.Stack;

public static boolean isPalindrome(String str) {
    Stack<Character> stack = new Stack<>();
    for (char c : str.toCharArray()) {
        stack.push(c);
    }
    StringBuilder reverseStr = new StringBuilder();
    while (!stack.isEmpty()) {
        reverseStr.append(stack.pop());
    }
    return str.equals(reverseStr.toString());
}

这些方法都可以用来判断一个字符串是否为回文字符串,任选其中一种即可。