这是查找最长重复子串代码(来源:geeksforgeeks):
def longestRepeatedSubstring(str):
n = len(str)
LCSRe = [[0 for x in range(n + 1)]
for y in range(n + 1)]
res = "" # To store result
res_length = 0 # To store length of result
# building table in bottom-up manner
index = 0
for i in range(1, n + 1):
for j in range(i + 1, n + 1):
# (j-i) > LCSRe[i-1][j-1] to remove
# overlapping
if (str[i - 1] == str[j - 1] and
LCSRe[i - 1][j - 1] < (j - i)):
LCSRe[i][j] = LCSRe[i - 1][j - 1] + 1
# updating maximum length of the
# substring and updating the finishing
# index of the suffix
if (LCSRe[i][j] > res_length):
res_length = LCSRe[i][j]
index = max(i, index)
else:
LCSRe[i][j] = 0
# If we have non-empty result, then insert
# all characters from first character to
# last character of string
if (res_length > 0):
for i in range(index - res_length + 1,
index + 1):
res = res + str[i - 1]
return res
# Driver Code
if __name__ == "__main__":
str = "geeksforgeeks"
print(longestRepeatedSubstring(str))
# This code is contributed by ita_c
如何修改它以获取长度为x的子串并以最长的子串结尾的较短的重复的不重叠子串? (尝试了各种更改,但从未获得正确的结果)。
答案 0 :(得分:0)
假设这是某种编程活动,我不想提供代码本身。我会提供提示。
如何修改它以获取长度为x的子串并以最长的子串结尾的较短的重复的不重叠子串? (尝试了各种更改,但从未获得正确的结果)。
请让我知道我是否正确理解...
您想获取所有不重叠的最长子字符串,对吧?
第一个问题:不重叠意味着最长的子字符串可以剪切其他长的子字符串。反之亦然。从最长到x搜索,而不是从x到最长搜索。
第二个问题:我们更关心的是-字符串的长度或数量?
如果我们只关心当前时间最长的时间,则可以:
x
,请保存(否则退出)abbcacbb
拥有最长的子字符串bb
-删除它会产生acac
,得到ac
,这是错误的)基本上是伪代码,您需要将其“翻译”为真实代码。使用while
循环。 ;)
您不需要修改给定的功能-如您所见,第1点按原样使用它。您只需要从对该函数的多次调用中获得结果。 ;)