检查回文字符串

新手上路,请多包涵

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

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

这是我的代码:

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

原文由 DarkLeafyGreen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 295
2 个回答

为什么不只是:

 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。

我们将比较 word[0]word[4] 的第一个循环迭代。它们相等,所以我们增加 i1(现在是 1)并减少 i2(现在是 3)。

所以我们然后比较n。它们相等,所以我们增加 i1(现在是 2)并减少 i2(现在是 2)。

现在 i1 和 i2 相等(它们都是 2),因此 while 循环的条件不再为真,因此循环终止并且我们返回真。

原文由 dcp 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过将字符串与自身的反转进行比较来检查字符串是否为回文:

 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 在时间和空间方面对该解决方案的效率(或缺乏效率)进行 了非常彻底的分析。如果您对这个问题的计算复杂性和其他可能的解决方案感兴趣,请阅读它!

原文由 Greg 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题