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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值