Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 문자열에서 가장 긴 반복 시퀀스를 찾는 방법은 무엇입니까?

<시간/>

defaultdict를 사용하여 입력 문자열의 각 위치에서 시작하는 각 하위 문자열을 집계할 수 있습니다. getsubs 메소드는 호출될 때마다 더 작은 하위 문자열을 생성하는 생성기 메소드입니다.

예시

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")

출력

이것은 출력을 줄 것입니다:

'hellopeople'