检查字符串是否为回文

2022-08-31 10:53:46

回文是一个单词,短语,数字或其他单位序列,可以在任何一个方向上以相同的方式阅读。

为了检查一个单词是否是回文,我得到单词的char数组并比较chars。我测试了它,它似乎有效。但是,我想知道它是否正确,或者是否有需要改进的地方。

这是我的代码:

public class Aufg1 {
    public static void main(String[] args) {
        String wort = "reliefpfpfeiller";
        char[] warray = wort.toCharArray(); 
        System.out.println(istPalindrom(warray));       
    }

    public static boolean istPalindrom(char[] wort){
        boolean palindrom = false;
        if(wort.length%2 == 0){
            for(int i = 0; i < wort.length/2-1; i++){
                if(wort[i] != wort[wort.length-i-1]){
                    return false;
                }else{
                    palindrom = true;
                }
            }
        }else{
            for(int i = 0; i < (wort.length-1)/2-1; i++){
                if(wort[i] != wort[wort.length-i-1]){
                    return false;
                }else{
                    palindrom = true;
                }
            }
        }
        return palindrom;
    }
}

答案 1

为什么不是:

public static boolean istPalindrom(char[] word){
    int i1 = 0;
    int i2 = word.length - 1;
    while (i2 > i1) {
        if (word[i1] != word[i2]) {
            return false;
        }
        ++i1;
        --i2;
    }
    return true;
}

例:

输入是“andna”。
i1 将为 0,i2 将为 4。

我们将比较的第一个循环迭代和 。它们是相等的,所以我们递增 i1(现在是 1)并减少 i2(现在是 3)。
因此,我们比较 n。它们是相等的,所以我们递增 i1(现在是 2)和递减 i2(现在是 2)。
现在 i1 和 i2 是相等的(它们都是 2),所以 while 循环的条件不再为真,因此循环终止,我们返回 true。word[0]word[4]


答案 2

您可以通过将字符串与字符串本身的背面进行比较来检查它是否是回文:

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

或者对于早于 1.5 的 Java 版本,

public static boolean isPalindrome(String str) {
    return str.equals(new StringBuffer().append(str).reverse().toString());
}

编辑:@FernandoPelliccioni在时间和空间方面对此解决方案的效率(或缺乏效率)进行了非常彻底的分析。如果您对此的计算复杂性以及此问题的其他可能解决方案感兴趣,请阅读它!