[英]Find longest repeated substring, most occurring if multiple candidates
我想創建一個 python 程序來查找最長的重復 substring,如果有多個候選者,則出現次數最多。 第一優先級是最長的,只有當有兩個相同長度的字符串最長時,它應該是 go 最多出現。 子字符串不允許重疊。 例子:
如果有一個 4 個字符的字符串出現了兩次,一個 3 個字符的字符串出現了 3 次,它會返回 4 個字符的字符串。
如果有一個 4 個字符的字符串出現兩次,一個 4 個字符的字符串出現兩次,它將返回出現兩次的那個。
如果沒有出現多次的模式,它將返回原始字符串。
如果您有字符串“grhasdfjlksegkasdfdfshlgkjsdngbkj”,它將返回“asdf”,因為這是最常出現的 substring。
這是我到目前為止嘗試過的代碼:
line = "grhasdfjlksegkasdfdfshlgkjsdngbkj"
li = list(line)
c = 0
pu = 0
m = {}
for s in li:
sta = s
if pu == 0:
css = c
oln = line
while True:
st = sta + li[css+1]
print(st)
ln = line
for i in range(pu):
ln = ln[:css+i] + ln[(css+i+1):]
if st in ln:
pu += 1
css += 1
oln = line
sta = st
else:
m[pu] = sta
line = oln
break
c += 1
else:
pu -= 1
您的方法可能是固定的,但它似乎是從基本原則開始的。
為什么不使用 Python 提供的功能:
def most_common_longest_recurring_substring(s):
# this works for non-overlapping substrings, as it uses str.count()
m, r = 0, '' # m is the best count so far, r the string in question
for n in range(len(s) - 1, 0, -1):
for i in range(len(s) - n):
if 1 < s.count(s[i:i+n]) > m:
m = s.count(s[i:i+n])
r = s[i:i+n]
# once any result has been found, stop because you favour length over count
if m > 0:
return r
x = most_common_longest_recurring_substring('abcde')
print(x)
x = most_common_longest_recurring_substring('abcdea')
print(x)
x = most_common_longest_recurring_substring('abcdabc')
print(x)
x = most_common_longest_recurring_substring('grhasdfjlksegkasdfdfshlgkjsdngbkj')
print(x)
Output:
None
a
abc
asdf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.