ABC137の解けなかったやつC問

アナグラムかどうかの判定問題

文字列の中のアルファベットごとの出現回数を調べる

文字列を辞書順にソートして同じ文字列になればそれはアナグラムである

この2つの方法があり、ひらめくことが出来たが

組の数を数えるところでTLEしてしまった。

この場合はハッシュテーブルを使うのが早いらしい。

pythonでいうdictinaryのこと。

少し面倒なのがdictはキーに対する値が設定されていない場合エラーになる。

そこでキーに対する初期値を与える便利なライブラリがある。

from collections import defaultdict

それが上のやつ。

countDict = defaultdict(int)

みたいに引数に関数を渡すと初期値を設定してくれる。

intはlambda:intという無名関数と同じで0がセットされる。

def func():

      return 10

countDict = defaultdict(func)

みたいにすればキーに対する初期値が10になる。

 

これでACできる。

from collections import defaultdict
N = int(input())
S = [''.join(sorted(list(str(input())))) for i in range(N)]
countDict = defaultdict(int)

ans = 0
for s in S:
ans += countDict[s]
countDict[s] += 1
print(ans)