次の文字列を持つファイルがあるとしましょう
a a a b a a b a a b b a b
ファイルにアクセスすることはできませんが、一度に 1 文字を与える関数 FetchNextChar() にアクセスできます。
一致するパターンは a a b
総ヒット数はどうやって数えますか?
これが私が考えていることです。
- フェッチされた文字がパターン ('a') の最初の文字である場合は、それをキューに追加します
- pattern の次の文字と一致する場合、次の文字の連結リストの追加/作成を開始します
したがって、最初のフェッチの後、
Pattern -a
Queue - a
Then
Pattern -a a
Queue[0] a->a
Queue[1] a
3rd
Pattern a a b
Queue[0] a -->a--> a //doesn't match, dequeue
Queue[1] a-> a
Queue[2] a
これはうまくいくと思いますが、パターンの最初の文字と一致する文字が複数ある場合、キューに追加し続けてリストを増やし続けるという問題があります。
何かご意見は?