もっと簡単なタスクで何をしようとしているのかを探ってみましょう。次の文字列内のDC
またはのインスタンスを折りたたみます。CDC
[D,C,D,C,D,C,C,C,D,C,C,D,C]
DC
に現れるのでCDC
、最初に長い文字列を実行する必要があります。CDC
最初の文字から始めて、パターンが始まる場所を確認します。
DCDCDCCCDCCDC
^ ^ ^
これらの結果をそれぞれ折りたたむと、次のようになります。
D(CDCx1)DCC(CDCx2)
次に、次を確認しDC
ます。
D(CDCx1)(DCx1)C(CDCx2)
ええとああ!これはあなたの出力例にはなりませんでした! 別の順序で検索するとどうなるでしょうか。それぞれをマークすると、次のようDC
になります。
DCDCDCCCDCCDC
^ ^ ^ ^ ^
これは次のように折りたたまれます。
(DCx3)CC(DCx1)C(DCx1)
ええと、それはあなたの出力にもなりません。
したがって、別の戦術を試すとどうなるか...最初から始めて、できるだけ早く任意のパターンに貪欲に一致させましょう。
DCDCDCCCDCCDC
^
CDCに匹敵できますか?いいえ、DCはどうですか?はい!
(DCx1)DCDCCCDCCDC
^
最初の交換後から、同じテストを行います。CDC?いいえ、DC?はい!
(DCx2)DCCCDCCDC
^
もう一度:CDC?いいえ、DC?はい!
(DCx3)CCDCCDC
^
CDC?いいえ、DC?いいえ、次の文字にスキップします。
(DCx3)CCDCCDC
^
CDC?はい!
(DCx3)C(CDCx1)CDC
^
CDC?はい!
(DCx3)C(CDCx2)
^
テキストの最後に到達しました。さらに、出力は期待値と一致しています。したがって、これを完全なアルゴリズムに拡張するには、可能なサブセットの完全なリストが必要です: CCC、CCD、CDC、CDD、DCC、DCD、DDC、DDD、CC、CD など。
幸運を!