【JavaScript】2つの文字列がアナグラム(同じ文字で構成されるが順番が異なる)かどうかを判定するプログラムと仕組み
はじめに
アナグラムとは、同じ文字を使って順番が異なるだけの文字列を指します。たとえば、「listen」と「silent」、「race」 と「care」などがアナグラムの関係にあります。このページでは、JavaScriptを使って2つの文字列がアナグラムかどうかを判定する方法について解説します。
アナグラムの定義
アナグラムは、2つの文字列が同じ文字を使い、同じ頻度で出現していれば、順番が違ってもアナグラムと見なされます。たとえば、「eat」と「tea」や「rat」と「tar」はアナグラムです。逆に、文字の種類や数が異なればアナグラムではありません。
アナグラム判定アルゴリズム
2つの文字列がアナグラムかどうかを判定する方法にはいくつかのアプローチがありますが、最も簡単で効率的な方法は、文字列を並べ替えて比較する方法です。以下に、一般的なアルゴリズムを示します。
- まず、両方の文字列が同じ長さであるかをチェックします。
- 次に、文字列をそれぞれソートして、ソート後の結果が同じであればアナグラムと判定します。
- もし長さが異なったり、ソート結果が異なれば、アナグラムではないと判定します。
例1: 同じ文字で異なる順番のケース
まず、「listen」と「silent」を例に挙げてみましょう。これらの文字列はアナグラムです。
function isAnagram(str1, str2) {
if (str1.length !== str2.length) {
return false;
}
return str1.split('').sort().join('') === str2.split('').sort().join('');
}
console.log(isAnagram('listen', 'silent')); // true
このプログラムでは、まず文字列の長さを比較し、長さが異なればアナグラムではないと判定します。その後、文字列をそれぞれ分割し、ソートしてから比較しています。この方法で「listen」と「silent」はアナグラムと判定されます。
例2: 同じ文字数だが異なる文字のケース
次に、「hello」と「world」の例を見てみましょう。これらは同じ文字数を持っていますが、異なる文字を含んでいるため、アナグラムではありません。
console.log(isAnagram('hello', 'world')); // false
この場合、文字列のソート結果が異なるため、アナグラムではないと判定されます。ソート後の結果は「ehllo」と「dlorw」となり、異なる文字列です。
例3: 空の文字列
空の文字列もアナグラムと判定されます。なぜなら、空の文字列は文字が一切含まれていないため、アナグラムの定義に合致するからです。
console.log(isAnagram('', '')); // true
空の文字列は、どちらの文字列にも同じ文字が含まれていないため、アナグラムとみなされます。
まとめ
JavaScriptでのアナグラム判定は非常にシンプルなアルゴリズムで行うことができます。文字列の長さを比較し、ソートした結果が一致すればアナグラムであると判定できます。これを利用することで、簡単にアナグラム判定が可能です。日常的な文字列操作にも応用できるので、ぜひ覚えておきましょう。