【Java】つの文字列がアナグラム(同じ文字で構成されるが順番が異なる)かどうかを判定するプログラム

【Java】つの文字列がアナグラム(同じ文字で構成されるが順番が異なる)かどうかを判定するプログラム

概要

このページでは、Java言語を用いて「2つの文字列がアナグラムであるかどうかを判定するプログラム」を実装する方法について詳しく解説します。アナグラムとは、2つの文字列が同じ文字で構成されているが、順番が異なるだけの状態を指します。例えば、「listen」と「silent」はアナグラムです。

アナグラムの定義

アナグラムは、以下の条件を満たす2つの文字列のことを指します:

  • 文字列が同じ文字を含んでいる
  • 文字列内の各文字が同じ回数だけ出現する
  • 文字の順番が異なるだけである

例えば、「abc」と「cab」はアナグラムですが、「abc」と「def」はアナグラムではありません。

アナグラム判定アルゴリズム

アナグラム判定を行うためには、次のアルゴリズムを利用することが一般的です:

  1. 2つの文字列が同じ長さかを確認する。
  2. 文字列の各文字をソートし、同じ順序で並べる。
  3. ソートした結果が一致すれば、それらの文字列はアナグラムである。

これにより、文字列内の文字の順番に関わらず、文字そのものとその出現回数が同じであるかを判定できます。

アルゴリズムの実装

それでは、実際にJavaでアナグラムを判定するプログラムを実装してみましょう。以下はそのサンプルコードです:

public class AnagramChecker {
    public static void main(String[] args) {
        String str1 = "listen";
        String str2 = "silent";
        
        if (isAnagram(str1, str2)) {
            System.out.println(str1 + " と " + str2 + " はアナグラムです。");
        } else {
            System.out.println(str1 + " と " + str2 + " はアナグラムではありません。");
        }
    }

    public static boolean isAnagram(String str1, String str2) {
        // 文字列が同じ長さかどうかを確認
        if (str1.length() != str2.length()) {
            return false;
        }
        
        // 文字列をソート
        char[] charArray1 = str1.toCharArray();
        char[] charArray2 = str2.toCharArray();
        
        Arrays.sort(charArray1);
        Arrays.sort(charArray2);
        
        // ソート後の配列が一致するか確認
        return Arrays.equals(charArray1, charArray2);
    }
}
        

このプログラムでは、まず文字列の長さが同じであるかを確認し、その後各文字列を配列に変換してソートします。ソートされた配列が一致する場合、その2つの文字列はアナグラムであると判定されます。

実行例

上記のプログラムを実行した場合、次のような出力が得られます:

listen と silent はアナグラムです。
        

別の例として、以下の文字列を試してみましょう:

String str1 = "triangle";
String str2 = "integral";
        

この場合も、プログラムは以下のように表示します:

triangle と integral はアナグラムです。
        

もし文字列が異なれば、アナグラムではない旨が表示されます。例えば:

String str1 = "hello";
String str2 = "world";
        

この場合、実行結果は次のようになります:

hello と world はアナグラムではありません。
        

まとめ

Javaでのアナグラム判定は、文字列のソートを利用することで簡単に実装できます。このアルゴリズムは、文字列が同じ文字で構成されているかどうかを効率的に判定する方法として広く使われています。今後、他の文字列処理やアルゴリズムと組み合わせることで、さらに多くの問題に応用することができるでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です