python 得到数组的最长重复子数组
通过所有后缀数组的最长公共数组的思想, 参考 https://blog.csdn.net/renwotao2009/article/details/53039068
# coding=utf8 def get_common_len(list1, list2): """得到共同序列的长度""" common_len = 0 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