题解 | #最长回文子串#

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param A string字符串 
# @return int整型
#
class Solution:
    # # two case
    def solve(self, s: str, begin: int, end: int):
        while begin >= 0 and end < len(s) and s[begin] == s[end]:
            begin -= 1
            end += 1
        return end - begin - 1
        
    def getLongestPalindrome(self , A: str) -> int:
        # write code here
        maxlen = 1
        for i in range(len(A)-1):
            maxlen = max(maxlen, max(self.solve(A, i, i), self.solve(A, i, i+1)))
        return maxlen
        
刷题还是要记录思路,不然刷一道忘记一道,最近手生了,就现抄答案去理解然后慢慢的再自己动手吧!
这道题其实有更高效的dp,但是脑壳昏一时研究不明白,事情还很多,就暂时先这样

要的是最长回文串,回文的特性就是中心对称,然后对于回文来说,可能会关于一个中心点对称也会关于两个中心点对称(参考数列的中位数,可能有一个也可能有两个,这个时候就要分情况讨论了):
1. 当选择一个中心点讨论的时候,传i i进去,此时begin是i,end也是i,然后穿进去第一次判断肯定是相等的,依据这个中心展开即可
2. 当选择两个中心点讨论的时候,其实就相当于现判断i和i+1是否相等,相等就以此为中心展开讨论两边的情况,否则就gg
3. 解释一下end-begin-1是什么意思 : 因为begin减一、end加一之后才再去while循环进行判断,因此这个时候可能begin为-1,end为len(A)[整个串为回文串],那么end-begin-1就是回文串长度了
全部评论

相关推荐

06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务