ホームページ >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 は 1 にデクリメントされます。 3.
  • ループは継続し、word[1] (n) と word[3] (n) を比較します。
  • i1 は 2 にインクリメントされ、i2 は 2 にデクリメントされます。
  • 今、i1 は i2 に等しいため、ループは終了し、関数は true を返し、文字列が回文。

以上が文字列が回文であるかどうかを効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。