Saya sudah memikirkan masalah ini untuk sementara waktu, dan saya hanya bisa menemukan solusi rekursif tapi saya merasa ada cara pemrograman yang dinamis untuk melakukannya, saya tidak bisa mengatasinya. Apakah ini masalah terkenal yang tidak saya ketahui?
T: Diberikan string dan pola, kembalikan jumlah cara unik untuk mencocokkan huruf pola (dalam urutan) dengan string.
Klarifikasi: Untuk menemukan kecocokan, Anda mengambil karakter pertama dari pola, menemukan karakter yang cocok pertama dalam string, kemudian Anda mengambil karakter kedua dari pola dan mencocokkan dengan karakter pencocokan pertama dari string yang SETELAH Anda cocok sebelumnya dengan yang cocok karakter.
Contoh 1 (4 pertandingan):
String: DABBCDDE
Pola: ABD
Cara-cara yang mungkin (karakter yang dicetak tebal adalah tempat pola dicocokkan dengan string):
- D AB BC D DE
- D A B B C D DE
- D AB BCD D E
- D A B B CD D E
Contoh 2 (0 cocok):
String: ABC
Pola: BCA
(Anda mencocokkan B, C dan kemudian Anda berada di akhir string, Anda TIDAK dapat kembali dan mencocokkan dengan karakter sebelumnya)
Dengan pendekatan rekursif, saya memiliki metode yang melacak indeks saya di string ( sIndex ) serta pola ( pIndex ). Jika string [sIndex] cocok dengan pola [pIndex], kami memanggil metode itu lagi dan menambah sIndex dan pIndex. Jika tidak - cukup tambahkan sIndex dan coba lagi untuk menemukan kecocokan. Metode mengembalikan jumlah total karena nilai pengembalian panggilan rekursif ditambahkan bersama-sama. (Cocok tambahkan 1, tidak ada yang cocok tambahkan 0)
Kasus dasar:
Jika pIndex lebih besar dari panjang pola, kembalikan 0.
Jika sIndex lebih besar dari panjang string, kembalikan 1 (kami menemukan kecocokan!)
Apa solusi lain yang ada?
inserting
cukup menyesatkan. Bukankah elemen-elemen ini cocok pattern
dengan elemen-elemen string
secara berurutan?