使用Rabin-Karp算法寻找n个字符串的最大公共子串的算法
我有一段代码是用来找多个字符串中最长的公共子串的,但效果不是很好。请问这个算法能不能用哈希函数重写,比如说Rabin-Karp函数?
def f(strings):
sub = ''
if len(strings) > 1 and len(strings[0]) > 0:
for i in range(len(strings[0])):
for j in range(len(strings[0])-i+1):
if j > len(sub) and is_sub(strings[0][i:i+j], strings):
sub = strings[0][i:i+j]
return sub
def is_sub(sub, strings):
if len(strings) < 1 and len(sub) < 1:
return False
for i in range(len(strings)):
if sub not in strings[i]:
return False
return True
n = int(input())
strings = [input() for i in range(n)]
print (f(strings))
我试过用Rabin-Karp函数来检查某个子串是否在一个字符串里,但完全没有效果。如果有人能提供一个更有效的解决方案,那就太好了。
0 个回答
暂无回答