LeetcodeT5衍生开来--longest common s

2017-04-21  本文已影响0人  Elitack

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

上一篇下一篇

猜你喜欢

热点阅读