Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để tìm chuỗi lặp lại dài nhất trong một chuỗi bằng Python?

Bạn có thể sử dụng defaultdict để kiểm đếm từng chuỗi con bắt đầu bằng mỗi vị trí trong chuỗi đầu vào. Phương thức getubs là một phương thức trình tạo tạo ra một chuỗi con nhỏ hơn mỗi khi nó được gọi.

Ví dụ

from collections import defaultdict
def getsubs(loc, s):
    substr = s[loc:]
    i = -1
    while(substr):
        yield substr
        substr = s[loc:i]
        i -= 1
def longestRepetitiveSubstring(r):
    occ = defaultdict(int)
    # tally all occurrences of all substrings
    for i in range(len(r)):
        for sub in getsubs(i,r):
            occ[sub] += 1
    # filter out all sub strings with fewer than 2 occurrences
    filtered = [k for k,v in occ.items() if v >= 2]
    if filtered:
        maxkey =  max(filtered, key=len) # Find longest string
        return maxkey
    else:
        raise ValueError("no repetitions of any substring of '%s' with 2 or more occurrences" % (r))
longestRepetitiveSubstring("hellopeople18654randomtexthellopeoplefromallaroundthe world")

Đầu ra

Điều này sẽ cho kết quả:

'hellopeople'