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])