LeetCode高频100题刷题记录之——最长回文子串

1 问题描述

找到一个字符串中最长的回文子串。回文的含义是对称的。

2 代码实现

2.1 中心扩散法

中心扩散法的思想是,遍历整个字符串,分别以长度为12的字符字串作为中心,然后向外扩散,如果一个子串s[i: j]是回文字符串若s[i-1]==s[j+1],那么s[i-1: j+1]也是回文字符串,此处要注意,i, j的范围应在字符串索引范围之内。

同时,对于字符串中心长度为2的情形,需要首先判断这个子串是否是回文子串。

class Solution:
    def longestPalindrome(self, s: str) -> str:
        len_s = len(s)
        if len_s > 1:
            start = 0
            end = 0
            for i in range(len_s):
                if i < len_s - 1:
                    start_ = i
                    end_ = i
                    while (start_ - 1 >= 0) & (end_ + 1 < len_s):
                        if(s[start_ - 1] == s[end_ + 1]):
                            start_ -= 1
                            end_ += 1
                        else:
                            break
                    if (end_ - start_ - end + start) > 0:
                        end = end_
                        start = start_
                
                if i <= len_s - 2:
                    start_ = i
                    end_ = i + 1
                    if (s[start_] == s[end_]):
                        while (start_ - 1 >= 0) & (end_ + 1 < len_s):
                            if(s[start_ - 1] == s[end_ + 1]):
                                start_ -= 1
                                end_ += 1
                            else:
                                break
                        if (end_ - start_ - end + start) > 0:
                            end = end_
                            start = start_

            return s[start: end+1]

        else:
            return s

时间复杂度 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值