zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    🍖JS函数
    🍖JS流程控制
    🍖JS运算符介绍
    🍖JS数值类型与字符串类型的内置方法
    多态
    property装饰器
    封装
    组合
    继承&派生 属性查找
    继承与派生
  • 原文地址:https://www.cnblogs.com/dasheng-maritime/p/9075004.html
Copyright © 2011-2022 走看看