题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

# -*- coding:utf-8 -*-

class Solution:
    def getLongestPalindrome(self, A, n):
        strList=list(A)
        maxLen=1
        for i in range(n):    #最外层迭代首字母
            for j in range(n-1,i,-1):    #倒序迭代尾字母
            #长度为n,最后一个字母的序号为n-1,range含头不含尾,不会检查自己
                if strList[i]!=strList[j]:    #如果不同,继续找和首字母相同的
                    continue    #继续去找下一个尾字母
                else:    #如果相同,检查内部字符是否为回文
                    Flag=True    #来确认是否走完
                    tempMaxLen=0
                    for k in range (i, j + 1):  # 在该文字段内遍历
                        # 不用担心迭代过半,重复迭代,要计算长度
                        # 为了能迭代到尾部,必须+1
                        InnerHead = strList[k]
                        InnerTail = strList[j - (k - i)]
                        if InnerHead != InnerTail:  # 如果不同
                            Flag=False
                            break
                        else:
                            continue
                    if Flag:
                        tempMaxLen = j - i + 1  # 只有走完了,才确认这个是回文
                #每个首字母迭代一轮,都要输出一个最长长度
                maxLen=max(tempMaxLen,maxLen)    
        return maxLen
  1. 核心在于两层嵌套迭代后,遍历内部string是否为回文。
  2. 正常情况下,要考虑内部回文单双数情况;但这里是要返回回文长度,所以遍历完正好返回长度
  3. maxLen比较,一定要首尾字母相同的情况下才更新(即最后max语句要对齐if strList[i]!=strList[j])
全部评论

相关推荐

你见过凌晨四点的牛客吗_BY_KobeBryant:明年再投都一样😂😂
点赞 评论 收藏
分享
03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务