Có 2 khía cạnh quan trọng trong vấn đề này.
- Vì chúng ta cần S làm chuỗi con của S2 + ngược (S2), S2 nên có ít nhất là n/2 chiều dài.
- Sau khi nối của S2 và đảo ngược (S2), có một mô hình nơi các bảng chữ cái lặp đi lặp lại như
Vì vậy, giải pháp là để kiểm tra từ trung tâm của S đến cuối S cho bất kỳ yếu tố liên tiếp nào.Nếu bạn tìm thấy một thì hãy kiểm tra các phần tử ở hai bên như được hiển thị.
Bây giờ nếu bạn có thể tiếp cận đến hết chuỗi, sau đó số lượng tối thiểu của các yếu tố (kết quả) là khoảng cách từ đầu đến điểm mà bạn tìm thấy các yếu tố liên tiếp. Trong ví dụ này, C i.e 3.
Chúng tôi biết rằng điều này có thể không xảy ra luôn. tức là bạn không thể tìm thấy các yếu tố liên tiếp ở trung tâm. Hãy để chúng tôi nói rằng các yếu tố liên tiếp là sau khi trung tâm sau đó chúng tôi có thể làm cùng một thử nghiệm.
chuỗi Main
xâu
chuỗi Nối
Bây giờ đến t ông nghi ngờ lớn. Tại sao chúng ta chỉ xem xét phía bên trái bắt đầu từ trung tâm? Câu trả lời rất đơn giản, chuỗi nối được tạo bởi S + ngược (S). Vì vậy, chúng tôi chắc chắn rằng phần tử cuối cùng trong chuỗi con đến liên tiếp trong chuỗi được ghép nối. Không có cách nào mà bất kỳ sự lặp lại nào trong nửa đầu của chuỗi chính có thể cho kết quả tốt hơn vì ít nhất chúng ta phải có n bảng chữ cái trong chuỗi nối cuối cùng
Bây giờ vấn đề phức tạp: Tìm kiếm các chữ cái liên tiếp cho tối đa O (n) Bây giờ, việc kiểm tra các phần tử ở hai bên có thể làm cho trường hợp phức tạp nhất của O (n). nghĩa là so sánh tối đa n/2. Chúng ta có thể thất bại nhiều lần khi thực hiện lần kiểm tra thứ hai để chúng ta có một mối quan hệ nhân giữa sự phức tạp với O (n * n).
Tôi tin rằng đây là giải pháp đúng và chưa tìm thấy bất kỳ lỗ hổng nào.
Nguồn
2016-05-10 10:56:31
Giải pháp O (n^3) có được chấp nhận không? – Sayakiss
Không, tôi cần một giải pháp tốt hơn O (n^3). – LTim