>>121
あぁ4文字固定でいいのか
そしたらね

1. 文字列Aと文字列Bの長さを比較して短い方を「辞書」に採用
2. 辞書をスキャンして4文字分を先頭から最大値-3に達するまでシフトしながら抽出(今やってる内容と同様のループ処理)
3. ループ内で抽出した文字列が長い方の文字列に含まれるかチェックしてマッチすれば抜ける

これでループ回数が減ると思うよ
チェック文字列の長さを変数にすれば不定長でも対応できるね
その場合は抽出チェック用文字列の長さを4から始めてシフトしながら含まれるかチェックしていく(4のときは固定と同じ)
5,6,7...と増やして長い文字列の半分+1文字に達した時でチェックを打ち切っていいかな

抽出チェック用文字列を長→短でお尻の位置を1文字ずつ短くするのを先頭位置のみシフトってので繰り返すなり
反対に短→長でお尻の位置を1文字ずつ長くシフトしてってので繰り返すなり
こういうロジックの方が若干シンプルに書けるけどチェック用文字列が長くなるほどマッチする期待は下がるんでチェック用文字列が短い状態から1文字増やしては全ナメを繰り返した方が速そう