解题思路
由回文串正序和反序的性质相同,可以得出一个性质,如果一个字符串,其中心不是回文串,那么它一定不是个回文串。如果去掉头和尾,它依然还是一个回文串。在头和尾加上同一个字符也是一个回文串。
由此可以得出判断一个区间是否是回文串,可以由更小的区间得到,并且不受包含这个区间的大区间影响,所以满足无后效性且是最有子结构,可以用动态规划求解。
算法:动态规划
设dp(l, r),代表区间[l, r]是否是回文串。
如果s[l] == s[r],并且s[l + 1 ~ r - 1]是回文串的话,s[l ~ r]就是回文串。
复杂度分析
设字符串长度为n。
时间复杂度O(n^2)
枚举端点,O(1)时间转移,时间复杂度为O(n^2)。
空间复杂度O(n^2)
需要额外O(n^2)空间记录dp值。
代码
1 | class Solution: |
参考链接
https://www.jiuzhang.com/solutions/longest-palindromic-substring/#tag-highlight-lang-python