Vấn đề này đòi hỏi chúng ta để liên tục xoá sự kiện đầu tiên của chuỗi T từ một chuỗi lớn hơn S cho đến khi T không còn xuất hiện trong S. Bản dịch chữ của quá trình này sẽ như thế này:trong khi S.find(T) S.Erase(S.find(T))Thật không may, thuật toán này là một chút quá chậm. Mỗi cuộc gọi để tìm mất O(TS) (giả sử thực hiện cơ bản sử dụng cơ bản chuỗi kết hợp). Kể từ khi vòng lặp có thể lặp lại tối đa ST lần, nó sau này có thời gian chạy O(S2). Ngoài ra, mỗi cuộc gọi xóa mất thời gian O (S) có nghĩa là chúng tôi dành thời gian O(S2T) làm xóa cuộc gọi cũng là quá chậm.Có là một vài cách để khắc phục vấn đề hiệu suất này. Có lẽ các đơn giản nhất là để xây dựng chuỗi cuối cùng một ký tự tại một thời gian; bất cứ khi nào kết thúc của chuỗi phù hợp với T chỉ đơn giản là xóa hết. Xóa đầu của một chuỗi là hiệu quả hơn giữa các chuỗi vì không có dữ liệu cần phải được di chuyển sau khi nó. So sánh chuỗi đơn giản bằng cách sử dụng thuật toán này có thời gian chạy O(TS) đó là đủ nhanh để vượt qua tất cả các dữ liệu thử nghiệm.
đang được dịch, vui lòng đợi..
