問題は、通常の言語の問題とデータ構造の検索の問題が混在していることです。
最初の側面だけを考えると、正規表現を使用する傾向があります。「追加の文字」を繰り返すことができるかどうかはわかりません。できれば[WALOTHD]*MEN[WALOTHD]*
、あなたの場合には十分簡単で、簡単に適応できます。
繰り返すことができない場合は[WALOTHD]{0,7}MEN[WALOTHD]{0,7}
、ルールに違反するものから始めて除外することができます (「ALLOTMENT」はその表現に一致しますが、L と T を繰り返します)。
または、より複雑な正規表現を構築することもできますが、より良い表現による利点が、それが何であったかを理解するためのコストを上回るかどうかはわかりません.
辞書の検索とは反対に、DAWGはスペース効率が非常に高く、部分文字列を含む一致を比較的効率的に検索できます。これは、このパズルと完全に一致するわけではありません。心配すべき接頭辞と接尾辞の順列がかなりあるからです。テストがなければ、「追加」から繰り返すことができなければかなり良いことであり、できれば恐ろしいことだと思います. しかし、それは単なる推測です。GADDAG は一見の価値があるかもしれません。DAWG よりも大きくなりますが、この種の検索では高速になる可能性があります (GADDAG は、スクラブル解決で使用されます。これは、ここで発生している問題とほとんど同じです)。