首页 >Java >java教程 >如何高效判断字符串是否回文?

如何高效判断字符串是否回文?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-26 10:16:13694浏览

How to Efficiently Determine if a String is a Palindrome?

如何有效地检查字符串是否有回文

检查字符串是否有回文涉及验证它们在两个方向上的读取是否相同。完成此任务的一个简单方法是将字符串转换为字符数组并比较相邻元素。

以下是此方法的示例实现:

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

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

此代码迭代字符数组,比较两端的元素以确定它们是否匹配。然而,存在一种更优化的方法,涉及同时比较从开头和结尾开始的元素。

改进的代码:

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] (a) 与word[4] (a).
  • i1 递增至 1,同时 i2 递减至3.
  • 循环继续,比较 word[1] (n) 与 word[3] (n)。
  • i1 递增到 2,而 i2 递减到 2。
  • 现在,i1 等于 i2,因此循环终止,函数返回 true,表明该字符串是回文。

以上是如何高效判断字符串是否回文?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn