Tôi đã suy nghĩ về vấn đề này một thời gian và tôi chỉ có thể tìm ra giải pháp đệ quy nhưng tôi cảm thấy rằng có một cách lập trình động để thực hiện nó, tôi chỉ không thể tìm ra nó. Đây có phải là một vấn đề nổi tiếng mà tôi không biết?
Q: Cho một chuỗi và một mẫu, trả về số cách duy nhất khớp các chữ cái của mẫu (theo thứ tự) với chuỗi.
Làm rõ: Để tìm một kết quả khớp, bạn lấy ký tự đầu tiên của mẫu, tìm ký tự khớp đầu tiên trong chuỗi, sau đó bạn lấy ký tự thứ hai của mẫu và khớp với ký tự khớp đầu tiên của chuỗi đó SAU tính cách.
Ví dụ 1 (4 trận đấu):
Chuỗi: DABBCDDE
Hoa văn: ABD
Các cách có thể (ký tự in đậm là nơi mẫu được khớp với chuỗi):
- D AB BC D DE
- D A B B C D DE
- D AB BCD D E
- D A B B CD D E
Ví dụ 2 (0 trận đấu):
Chuỗi: ABC
Hoa văn: BCA
(Bạn khớp B, C và sau đó bạn ở cuối chuỗi, bạn KHÔNG thể quay lại và khớp với các ký tự trước đó)
Với cách tiếp cận đệ quy, tôi có một phương pháp theo dõi chỉ số nào tôi đang ở trên chuỗi ( s Index ) cũng như mẫu ( p Index ). Nếu mẫu [s Index] khớp với mẫu [p Index], chúng ta gọi lại phương thức và tăng s Index và p Index. Nếu không - chỉ cần tăng s Index và thử lại để tìm trận đấu. Phương thức trả về tổng số sau đó vì giá trị trả về của các cuộc gọi đệ quy được cộng lại với nhau. (Các trận đấu thêm 1, không có trận đấu nào thêm 0)
Trường hợp cơ sở:
Nếu p Index lớn hơn chiều dài của mẫu, trả về 0.
Nếu s Index lớn hơn độ dài của chuỗi, trả về 1 (chúng tôi đã tìm thấy kết quả khớp!)
Có những giải pháp nào khác?
inserting
khá sai lệch. Đây không phải là yếu tố phù hợp pattern
với các yếu tố string
theo thứ tự theo cách có thể?