python 得到数组的最长重复子数组
通过所有后缀数组的最长公共数组的思想, 参考https://blog.csdn.net/renwotao2009/article/details/53039068
# coding=utf8 def get_common_len(list1, list2): """得到共同序列的长度""" common_len =for i in range(min(len(list1), len(list2))): if list1[i] != list2[i]: break common_len += 1 return common_len def compute_max_sub_list(name_list): # 1. 得到所有的后缀数组 suffix_sub_list = [] for i in range(len(name_list)): suffix_sub_list.append(name_list[i:]) # 2.后缀子数组 排序 suffix_sub_list.sort() // print suffix_sub_list # 3.求相邻的后缀子数组 的最长公共数组 max_suffix_sub = [] for i in range(len(suffix_sub_list) - 1): common_len = get_common_len(suffix_sub_list[i], suffix_sub_list[i + 1]) if common_len <= len(max_suffix_sub): continue max_suffix_sub = suffix_sub_list[i][:common_len] for name in max_suffix_sub: print name if __name__ == '__main__': compute_max_sub_list([4, 1, 2, 3, 2]) compute_max_sub_list([u"规则1", u"名字1", u"名字2", u"名字3", u"规则2", u"名字1", u"名字2", u"名字3"])
输出的结果:
名字1 名字2 名字3
相关推荐
CodeAsWind 2020-08-17
sunnyhappy0 2020-07-09
cxcxrs 2020-06-26
深思千年 2020-06-10
xmwang0 2020-06-01
fgleeldq 2020-05-27
ShiShuo 2020-05-16
文山羊 2020-05-08
tengyuan 2020-05-07
Leewoxinyiran 2020-05-06
sschencn 2020-05-04
vevoly 2020-05-04
一只码畜 2020-04-22
sulindong0 2020-03-09
GoatSucker 2020-02-24
sdwylry 2020-02-14