「(部分列に)文字がちょうど個含まれること」の通りすべてに対して、あらかじめ乱数を割り振っておく。 最初の文字のヒストグラムを作って、各文字について該当するのXORを取って、最初のハッシュ値とする。
あとは、長さの部分列をスライドさせながら各部分列のハッシュ値を求めていく。直前の部分列のハッシュ値がであったとし、文字が加わっての数がからに増え、文字が除かれての数がからに減るとすると、新しい部分列のハッシュ値はになる。このハッシュ値をキーとして、部分列の開始位置を保持しておく。同じハッシュ値が再び出現した時、開始位置が以上離れていればアナグラムダジャレが見つかったことになる。
アルファベットのサイズをとするとき、計算量は。
こんなことしなくても、普通にヒストグラムをキーにするだけで通った……