Điều này hoàn toàn nằm ngoài sự tò mò. Tôi đã duyệt qua một bài báo so sánh các thuật toán tìm kiếm chuỗi khác nhau và nhận thấy rằng tất cả chúng đều được thiết kế để tìm chuỗi con phù hợp đầu tiên. Điều này khiến tôi suy nghĩ ... Nếu tôi muốn tìm tất cả các lần xuất hiện của một chuỗi con? Tôi chắc chắn rằng tôi có thể tạo ra một vòng lặp sử dụng một biến thể của KMP hoặc BM và đổ mỗi lần xuất hiện vào một mảng nhưng điều này hầu như không có vẻ như nó sẽ là nhanh nhất.Cách nhanh nhất để tìm tất cả các lần xuất hiện của chuỗi con là gì?
Không phải thuật toán phân chia và chinh phục cao hơn? Ví dụ:
Ví dụ: cho phép bạn tìm chuỗi "abc" trong chuỗi "abbcacabbcabcacbccbabc".
- Khi vượt qua đầu tiên tìm tất cả các lần xuất hiện của ký tự đầu tiên và lưu trữ vị trí của chúng.
- Trên mỗi đèo bổ sung, sử dụng các vị trí từ vượt qua trước đó để tìm tất cả các lần xuất hiện của ký tự tiếp theo, giảm các ứng cử viên cho lần vượt tiếp theo với mỗi lần lặp.
Xem xét sự dễ dàng mà tôi nghĩ ra ý tưởng này Tôi giả sử một người nào đó đã nghĩ ra và cải thiện nó cách đây 30 năm.
Điều đó tùy thuộc. Nếu bạn có chuỗi "aaaaaa" có bao nhiêu "aa" ở đó? 3? 5? Nó cũng phụ thuộc vào ngôn ngữ bạn đang sử dụng. – Peter