[Python] アナグラムかどうか確認する

Python で与えられた文がアナグラムかどうか確認します。

アナグラム(anagram)とは、言葉遊びの一つで、単語またはの中の文字をいくつか入れ替えることによって、全く別の意味にさせる遊びである。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

回文と似ていますが、アナグラムでは文字をソートしなければならないので、\( O (N \log N) \) になります。

Python で与えられた文が回文かどうかを確認します。 回文(かいぶん)とは、始めから(通常通り)読んだ場合と終わりから(通常と逆に)読んだ場合とで文字ないし音節の出現する順番が変わらず、なおかつ、言語としてある程度意味が通る文字列のことで、言葉遊びの一種である。英語で...
import re

def is_anagram(text1, text2):
    text1 = delete_punctuation(text1)
    text2 = delete_punctuation(text2)

    if len(text1) != len(text2):
        return False

    # O (N log N)
    text1 = sorted(text1)
    text2 = sorted(text2)

    return text1 == text2


def delete_punctuation(text):
    text = re.sub(r'[\W]', '', text)
    text_del_punc = re.sub(r'\_', '', text)

    return text_del_punc.lower()


if __name__ == '__main__':
    
    text1 = 'anagrams'
    text2 = 'ARS MAGNA'
    # True
    print(is_anagram(text1, text2))

    text1 = 'anagram'
    text2 = 'ARS MAGNA'
    # False
    print(is_anagram(text1, text2))