https://leetcode.com/problems/longest-palindromic-substring/
这道题我分了两类 单字符中心和双字符中心
单字符的 遍历每一个字符 找以它为中心左右两个是否相等
把左边的起点的index和总长度记住
双字符 寻找两个连续的字符作为中心 方法相同
其中单中心的 length=min(i,len(s)-i-1) 就是看中心离哪边近 最后这个半径是不能超过length的
class Solution:
# @param {string} s
# @return {string}
def longestPalindrome(self, s):
max=1#最长串长度
needle=0#最长串开始位置(index)
for i in range(1,len(s)-1):#单中心
length=min(i,len(s)-i-1)#防止溢出边界
for j in range(i-length,i)[::-1]:
if j==i-length and s[j]==s[2*i-j]:
if (i-j)*2+1>max:
max= (i-j)*2+1
needle=j
if s[j]!=s[2*i-j] :
if (i-j)*2-1>max:
max= (i-j)*2-1
needle=j+1
break#以i为中心的已经结束了 break这个for j i应该自加了
for i in range(len(s)-1):#双中心
if s[i]==s[i+1]:
length=min(i,len(s)-i-2)
if length==0:
if 2>max:
max=2
needle=i
else:
for j in range(i-length,i)[::-1]:
if j==i-length and s[j]==s[2*i+1-j]:
if length*2+2>max:
max= length*2+2
needle=j
if s[j]!=s[2*i+1-j] :
if (i-j)*2>max:
max=(i-j)*2
needle=j+1
break
return s[needle:needle+max]