https://leetcode.com/problems/longest-palindromic-substring/

来源:互联网 发布:go语言和java性能对比 编辑:程序博客网 时间:2024/06/05 06:35

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]

  

0 0
原创粉丝点击