Ví dụ: Chuỗi A = "abcd" thì câu trả lời phải là {a, ab, abc, abcd, b, bc, bcd, c, cd, d} (Tôi không biết điều này tất cả đều được gọi là chuỗi con hay không nhưng tôi giả định như vậy ...)Tìm tất cả chuỗi con có thể theo cách nhanh nhất
để tìm tất cả các chuỗi con tôi đã sử dụng phương pháp
for (int i = 0; i < A.length(); i++) {
for (int j = i+1; j <= A.length(); j++) {
System.out.println(A.substring(i,j));
}
}
sau Tuy nhiên, theo hiểu biết của tôi nó đi đến N^2 chúng ta có thể làm nó nhanh hơn tôi tham khảo câu hỏi pervious và có liên kết cho cây hậu http://allisons.org/ll/AlgDS/Tree/Suffix/ nhưng nó không có vẻ để giải quyết vấn đề của tôi .... đầu ra mà tôi nhận được từ hậu tố cây là {1: abcd 2: bcd 3: cd 4: d} bất kỳ ai có thể giúp tôi tìm cách nhanh nhất để làm điều này không? cảm ơn trước .....
Bạn không thể làm cho nó nhanh hơn O (n^2) để liệt kê các điểm bắt đầu và kết thúc của mỗi chuỗi con có thể, vì có O (n^2) các đoạn mã như vậy! Nếu bạn muốn in ra từng chuỗi con đầy đủ (như bạn hiện đang làm), thì độ phức tạp thời gian tăng lên đến O (n^3) vì nó mất thời gian tỉ lệ với độ dài chuỗi tổng thể để in từng chuỗi con. –
Cũng lưu ý rằng chuỗi rỗng cũng là một chuỗi con hợp lệ. – Philip
Bạn chỉ có thể làm cho nó nhanh hơn nếu bạn đang chạy một truy vấn trên tập hợp các chất nền mà không "chạm" tất cả. In chúng chạm vào tất cả chúng. Nếu bạn muốn hỏi, "chuỗi con dài nhất xuất hiện ít nhất hai lần" hoặc "chuỗi con nào có nhiều hơn k ký tự xảy ra thường xuyên nhất", thì bạn có thể làm như vậy mà không liệt kê tất cả các phần tử (với cây hậu tố). – harold