美文网首页
LeetcodeT5衍生开来--longest common s

LeetcodeT5衍生开来--longest common s

作者: Elitack | 来源:发表于2017-04-21 23:10 被阅读0次

    leetcode T5需要解决的时一个最长回文子串,大致思想在教程中给的很清晰了,一个是动态规划,一个是通过找对称关系一步步衍生扩大,还有一个思想是将子串倒过来然后找longest common tree.

    这里提一下一个简单的解决longest common tree的解法

    动态规划

    思想很简单,构建一个数组,一个式子就能表达清楚:

    a[i][j] = a[i-1][j-1]+1 if s[i] == s[j]

    python code如下:

    def LCS(s1, s2):
        m = len(s1)
        n = len(s2)
        array = []
        array = [[0 for i in range(n+1)] for j in range(m+1)]
    
        for i in range(1, m+1):
            for j in range(1, n+1):
                array[i][j] = array[i-1][j-1] + 1 if s1[i-1]==s2[j-1] else 0
        return array
    

    思想很简单,不过复杂度并不算很优化:
    算法复杂度:O(n²), 空间复杂度:O(n²)

    Suffix Tree

    大致思想是首先构造一颗简单的suffix tree.

    然后在suffix tree中进行查找.

    东西太多了直接上链接:CSDN


    同时说下在码的过程中碰到的问题:

    使用python创建高维list时需要小心,尽量采用for去创建,而不是用例如:

    list = [1] * 3
    

    类似的式子,原因参考
    Geeking

    相关文章

      网友评论

          本文标题:LeetcodeT5衍生开来--longest common s

          本文链接:https://www.haomeiwen.com/subject/dsujzttx.html