我的解法
找回文子串的对称轴。遍历s,对每个字符寻找以其为对称轴的最长回文子串即可。特别处理的是当s[i]=s[i+1]的时候,需要以s[i]为对称轴和以s[i],s[i+1]为对称轴分别寻找一次(存在"ccc"这种情况时,仅以s[i],s[i+1]为对称轴可能会漏掉回文子串)。
官方解法
方法一:动态规划。状态转移方程:p[i,j] = p[i+1,j-1] ^ s[i] == s[j]。注意字符串长度为1或2的边界条件。遍历子串长度L和i,可以确定j的位置,然后根据s[i]和s[j]及dp[i+1][j-1]来确定dp[i][j]。评论区给出的正序dp为先遍历j,再从大到小遍历i,其他部分相同。(因为i+1和j-1?)
方法二:中心扩展。即为我的解法。官方题解里是对每个字符都寻找两类字符串。题解代码里可以学到的是利用指针来比较字符串长度和切片,相较于我的代码来说效率应当会更高一些。
方法三:Manacher 算法,本质也是中心扩展,减少了重复计算。留一条来不及看的讲解,等会回来看来自:灵茶山艾府
知识点
动态规划