Nếu tôi có một chuỗi đầu vào và một mảng:Tiền tố chung dài nhất sử dụng bộ đệm?
s = "to_be_or_not_to_be"
pos = [15, 2, 8]
Tôi cố gắng để tìm ra tiền tố chung dài nhất giữa các yếu tố liên tiếp của mảng pos
tham khảo bản gốc s
. Tôi cố gắng để có được kết quả như sau:
longest = [3,1]
Con đường tôi thu được điều này bằng cách tính toán tiền tố chung dài nhất của các cặp sau:
s[15:]
đó là_be
vàs[2:]
đó là_be_or_not_to_be
cho 3 (_be
)s[2:]
là_be_or_not_to_be
vàs[8:]
là_not_to_be
tặng 1 (_
)
Tuy nhiên, nếu s
là rất lớn, tôi không muốn tạo nhiều bản sao khi tôi làm điều gì đó như s[x:]
. Sau nhiều giờ tìm kiếm, tôi tìm thấy hàm buffer chỉ duy trì một bản sao của chuỗi đầu vào nhưng tôi không chắc chắn cách hiệu quả nhất để sử dụng nó ở đây trong ngữ cảnh này là gì. Bất kỳ đề xuất về cách để đạt được điều này?
+1 Cảm ơn bạn. Hãy để tôi kiểm tra hiệu suất của đoạn mã này và quay lại sớm. Nó chắc chắn trông tuyệt vời! :) – Legend
giải pháp 'commonprefix()' của bạn quá phức tạp, xem [bình luận của tôi] (http://stackoverflow.com/questions/8073808/longest-common-prefix-using-buffer/8073962#8073962) – jfs
@JFSebastian Tôi thấy bình luận của bạn; không đúng. Đầu ra mong muốn của anh ta là '[3, 1]', không phải '_'. Anh ta muốn _only hai vị trí đầu tiên được xem xét_, sau đó _only the two_ thứ hai, phiên bản của bạn _considers cả ba cùng một lúc_. – agf