आप इनपुट स्ट्रिंग में प्रत्येक स्थिति से शुरू होने वाले प्रत्येक उप स्ट्रिंग का मिलान करने के लिए डिफॉल्टडिक्ट का उपयोग कर सकते हैं। गेटसब विधि एक जनरेटर विधि है जो हर बार कॉल करने पर एक छोटी उप स्ट्रिंग उत्पन्न करती है।
उदाहरण
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'