0
点赞
收藏
分享

微信扫一扫

5.Longest Palindromic Substring(python解)

zidea 2022-01-13 阅读 51

1.暴力枚举就是确定边界【i,j】两个for循环遍历范围,一个while循环进行遍历判断,复杂度O(n^3),过不了时间限制。

2.动态规划解决复杂度O(n^2)

s="aba"
dp = [[0] * len(s) for i in range(len(s))]
maxlen = 0
maxi = 0
maxj = 0
for j in range(len(s)):
    for i in range(j + 1):
        dp[i][j] = (s[i] == s[j]) and (j - i < 3 or dp[i + 1][j - 1])
        if (dp[i][j] and j - i + 1 > maxlen):
            maxlen = j - i + 1
            maxi = i
            maxj = j
print(s[maxi:maxj + 1])

3.中心扩散法O(n^2)

def middle(i,j,s):
    m1=i
    m2=j
    while(m1>=0 and m2<len(s) and s[m1]==s[m2]):
        m1-=1
        m2+=1
    return m1+1,m2-1
s="abacd"
maxlen=0
maxi=0
maxj=0
for i in range(len(s)):
    x1,x2=middle(i,i,s)
    if(x2-x1+1>maxlen):
        maxlen=x2-x1+1
        maxi=x1
        maxj=x2
for i in range(len(s)-1):
    x1,x2=middle(i,i+1,s)
    if(x2-x1+1>maxlen):
        maxlen=x2-x1+1
        maxi=x1
        maxj=x2
print(s[maxi:maxj+1])
举报

相关推荐

0 条评论