Pythonでアナグラム判定:2つの文字列が有効なアナグラムかどうかを確認する方法
アナグラムとは?
アナグラムとは、ある文字列やパターンの文字を並べ替えて作られるすべての組み合わせのことを指します。このパターン検索アルゴリズムは少し特殊で、完全に一致するパターンだけでなく、テキスト中に含まれる指定パターンのあらゆる並べ替えを検索します。
例えば、「ANAGRAM」と「NAAGARM」は同じ文字で構成されているためアナグラムですが、「cat」と「fat」は文字が異なるためアナグラムではありません。
解決のアプローチ
この問題を解くには、以下の手順が有効です。
1. 文字列を文字のリストに変換する
2. リストをソートする
3. ソート後の2つのリストが一致すれば、それらはアナグラムであると判断できる
ソートすることで、文字の出現順序に関係なく、構成する文字が完全に同じかどうかを簡単に比較できます。
Pythonでの実装例
以下のコードは、その実装の一例です。理解を深めるために参考にしてください。
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
return "".join(sorted(s)) == "".join(sorted(t))
ob1 = Solution()
print(ob1.isAnagram("ANAGRAM","NAAGARM"))
入力
s = "ANAGRAM"
t = "NAAGARM"
出力
true
コードの解説
この実装では、Pythonの組み込み関数 sorted() を使って各文字列をソートし、join() で再び文字列に結合しています。両者の結果が等しければ true(アナグラム)、そうでなければ false が返されます。
なお、この方法の計算量は O(n log n) です。より効率化したい場合は、Collections.Counter を使って文字の出現回数をカウントし、O(n) で比較する方法もあります。
-
Pythonでアナグラム部分文字列を検索する方法【スライディングウィンドウで実装】
はじめに 本記事では、「テキスト中からパターンとそのアナグラム(文字の並べ替え)をすべて検索する」という問題を、Pythonで解く方法を解説します。 問題の定義 問題文: テキストとパターンが与えられます。このとき、テキスト内に出現するパターン本体だけでなく、その並べ替え(アナグラム)すべての出現位置を出力してください。 たとえば、パターンが「TOR」であれば、「ROT」「OTR」「RTO」なども同じ文字構成を持つため、すべて検索対象となります。 アルゴリズムのポイント この問題はスライディングウィンドウ(滑動窓)の考え方を使うと効率的に解けます。手順は以下のとおりです。 パターンの各文
-
Pythonで描く葉序(ようじょ)パターン ― フィボナッチ螺旋の美しさをコードで再現
葉序パターンとは? 植物学の授業や植物の世界でよく耳にする「葉序(ようじょ)」とは、植物の茎に花・葉・種子などがどのような順序で配置されるかを表す用語です。この配置は、いわゆる「フィボナッチ螺旋」と非常によく似たパターンを示します。 フィボナッチ螺旋は、パスカルの三角形にも似た規則性を持つ数列、すなわちフィボナッチ数列に基づいています。フィボナッチ数列は次のように続きます。 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 … この数列の特徴は、各項が直前の2つの数の和になっているという点です。自然界のあらゆる場所に潜む、シンプルながら奥深い数理構造と言えま