आप प्रत्येक स्थिति से शुरू होने वाली प्रत्येक सबस्ट्रिंग की गिनती के लिए 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)
# सभी सबस्ट्रिंग्स की घटनाओं को गिनें
for i in range(len(r)):
for sub in getsubs(i, r):
occ[sub] += 1
# 2 से कम घटनाओं वाली सभी सबस्ट्रिंग्स को फ़िल्टर करें
filtered = [k for k, v in occ.items() if v >= 2]
if filtered:
maxkey = max(filtered, key=len) # सबसे लंबी स्ट्रिंग खोजें
return maxkey
else:
raise ValueError("'%s' की किसी भी सबस्ट्रिंग की 2 या अधिक घटनाएं नहीं" % (r))
longestRepetitiveSubstring("hellopeople18654randomtexthellopeoplefromallaroundthe world")
आउटपुट
यह आउटपुट देगा:
'hellopeople'