Tôi sẽ trích dẫn vấn đề từ ACM 2003:
Xét một chuỗi có độ dài n (1 <= n <= 100000). Xác định vòng quay từ vựng tối thiểu của nó. Ví dụ: các phép quay của chuỗi Hồi giáo alabala 'là:
alabala
labalaa
bàn thờ
balaala
alaalab
laalaba
aalabal
và nhỏ nhất trong số đó là Hồi giáo aalabal.
Về giải pháp - tôi biết tôi cần xây dựng một mảng hậu tố - và giả sử tôi có thể làm điều đó trong O (n). Câu hỏi của tôi vẫn là, làm thế nào tôi có thể tìm thấy vòng quay nhỏ nhất trong O (n)? (n = chiều dài của một chuỗi)
Tôi rất quan tâm đến vấn đề này và bằng cách nào đó tôi vẫn không nhận được giải pháp. Tôi quan tâm nhiều hơn đến khái niệm và cách giải quyết vấn đề chứ không phải trong việc triển khai cụ thể.
Lưu ý: xoay tối thiểu có nghĩa là theo thứ tự như trong từ điển tiếng Anh - "dwor" đứng trước "word" vì d nằm trước w.
EDIT: xây dựng mảng hậu tố mất O (N)
EDIT LAST: Tôi nghĩ rằng tôi đã tìm thấy một giải pháp !!! Nếu tôi chỉ hợp nhất hai chuỗi thì sao? Vì vậy, nếu chuỗi là "alabala" thì chuỗi mới sẽ cho tôi "alabalaalabala" và bây giờ tôi chỉ cần xây dựng một mảng hậu tố của điều này (trong O (2n) = O (n)) và có hậu tố đầu tiên? Tôi đoán điều này có thể đúng. Bạn nghĩ sao? Cảm ơn bạn!