题解 | #最长回文子串#
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @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就是回文串长度了