>>128
そういう話で合ってるよ
自分でもう答えを導いてると思うな

長いキーワードから見ていくと「お願いします」は手に入るけど「お願い」は手に入らないから処理を続けることになる
蓋然性として長くなればなるほと一致する期待は下がるから無駄が増える
A文字列150文字とB文字200文字だとしてAを抽出ソースとして採用するとして150文字から4文字に向かって始めてもまぁなかなかマッチしないじゃん?

これを1文字目から97文字目まで先頭をズラして抽出ってのを最後尾を1文字ずつ詰めながら文字列長が4文字になるまで94回繰り返すと抽出1ループあたり1回減るとしても無駄が1番大きい(一致が1回でいいならなおさら)
反対にお尻をズラして抽出文字列を長くしていく方が一致を探すだけなら随分マシだけど、先頭を1,2,3...文字目とズラして短い→長いを繰り返すと長くなるほどまぁ一致しなくなるからペナルティが大きいよね(全パターン試行なら回数は長→短と同じ)

だったら先頭も末尾も同時にズラして抽出文字列を4文字に固定してまずB文字列を全部調べて続いて5,6,7と固定長伸ばしてってのを繰り返し調べるほうが効率いいね
さっきのA150文字B200文字の例だとAの51番目を開始位置にした100文字のテストでBにマッチしなかったらAの1番目を開始位置にした101文字以降のテストはやらなくていいしね
自分で言ってる通りそれまでのテストで100文字未満で一致するパターンが出現してるはずだからそれより長いパターンが含まれるわけないんで
これでも最悪のケースで実際にはマッチするパターンがゼロになった時点で打ち切れる