Ich habe eine Weile über dieses Problem nachgedacht und kann nur eine rekursive Lösung finden, aber ich habe das Gefühl, dass es eine dynamische Programmiermethode gibt, ich kann es einfach nicht herausfinden. Ist das ein berühmtes Problem, von dem ich nichts weiß?
F: Geben Sie anhand einer Zeichenfolge und eines Musters die Anzahl der eindeutigen Methoden zum Abgleichen der Buchstaben des Musters (in der angegebenen Reihenfolge) mit der Zeichenfolge zurück.
Erläuterung: Um eine Übereinstimmung zu finden, nehmen Sie das erste Zeichen des Musters, suchen das erste übereinstimmende Zeichen in der Zeichenfolge, nehmen dann das zweite Zeichen des Musters und stimmen mit dem ersten übereinstimmenden Zeichen der Zeichenfolge überein, das NACH Ihrer vorherigen Übereinstimmung liegt Charakter.
Beispiel 1 (4 Übereinstimmungen):
Zeichenfolge: DABBCDDE
Muster: ABD
Mögliche Möglichkeiten (fettgedruckte Zeichen sind der Punkt, an dem das Muster mit der Zeichenfolge übereinstimmt):
- D AB BC D DE
- D A B B C D DE
- D AB BCD D E.
- D A B B CD D E.
Beispiel 2 (0 Übereinstimmungen):
Zeichenfolge: ABC
Muster: BCA
(Sie stimmen mit B, C überein und befinden sich dann am Ende der Zeichenfolge. Sie können NICHT zurückgehen und mit vorherigen Zeichen übereinstimmen.)
Mit dem rekursiven Ansatz habe ich eine Methode, die verfolgt, an welchem Index ich mich in der Zeichenfolge ( sIndex ) sowie im Muster ( pIndex ) befinde . Wenn die Zeichenfolge [sIndex] mit dem Muster [pIndex] übereinstimmt, rufen wir die Methode erneut auf und erhöhen sIndex und pIndex. Wenn nicht, erhöhen Sie einfach den sIndex und versuchen Sie erneut, eine Übereinstimmung zu finden. Die Methode gibt dann die Gesamtzahl zurück, da der Rückgabewert der rekursiven Aufrufe addiert wird. (Übereinstimmungen addieren 1, keine Übereinstimmungen addieren 0)
Basisfälle:
Wenn pIndex größer als die Länge des Musters ist, geben Sie 0 zurück.
Wenn sIndex größer als die Länge der Zeichenfolge ist, geben Sie 1 zurück (wir haben eine Übereinstimmung gefunden!)
Welche anderen Lösungen gibt es?
inserting
ziemlich irreführend. Stimmen diese Elemente nicht pattern
mit den Elementen in der string
richtigen Reihenfolge überein?