私は最近、2 つの文字列が互いにアナグラムであるかどうかをチェックするアルゴリズムの設計を依頼されました。私の目標は、空間と時間の複雑さを最小限に抑えることだったので、次のアルゴリズムを思いつきました。
- それぞれゼロに初期化された 26 要素の配列を作成します。
- 最初の文字列をトラバースし、文字ごとに、その文字に対応する配列要素をインクリメントします。
- 2 番目の文字列をトラバースし、文字ごとに、その文字に対応する配列要素をデクリメントします。
- アレイ全体をスキャンします。すべての要素が 0 の場合、2 つの文字列はアナグラムです。
ただし、このアルゴリズムの時間の複雑さは O(n) であり、より複雑なアルゴリズムを思いつくことはできません。誰か知っていますか?