有两个要匹配的列表,li_a
给定的列表由句子的字符序列组成,而给定的列表li_b
是单词的集合。
li_a = ['T','h','e','s','e','45','a','r','e','c','a','r','s']
li_b = ['T','Th','The','Thes','These','a','ar','are','c','ca','car','cars']
该过程是li_a
迭代地匹配项目,与li_b
项目。如果 的第一个字符与项目li_a
相似,则将 的第一个字符与下一个字符连接,并重做该过程,直到达到最长匹配。然后,最长的任期应该被拆分,这个过程将一直持续到最后。由于未出现的未知字符和单词将照常附加。li_b
li_a
li_a
li_b
最后的工作应该是这样的:
new_li = ['These','45','are','cars']
到目前为止的尝试,但这适用于两个字符串而不是Lists,并且它不会检索未识别的单词。
def longest_matched_substring(s1, s2):
m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))]
longest, x_longest = 0, 0
for x in xrange(1, 1 + len(s1)):
for y in xrange(1, 1 + len(s2)):
if s1[x - 1] == s2[y - 1]:
m[x][y] = m[x - 1][y - 1] + 1
if m[x][y] > longest:
longest = m[x][y]
x_longest = x
else:
m[x][y] = 0
return s1[x_longest - longest: x_longest]