LeetCode 题解:647. 回文子串,动态规划,JavaScript,详细注释
原题链接:647. 回文子串
解题思路:
假设输入
aabaca
,用这段代码生成子串:
复制代码
可以看到最终打印的结果如下:
如果查看每一层循环结束时,打印生成的子串,会发现实际上是从左到右按列生成的。
复制代码
如果将
strs
用dp
数组代替,dp[i][j]
用于标记当前子串是否回文子串,有 3 种可能情况:
* i === j
,只有一个字母,必然为回文子串。
* j - i === 1
,有两个字母,当s[i] === s[j]
时,即两个字母相等时,是回文子串。
* j - i > 1
,有两个以上字母时,先判断s[i] === s[j]
,也就是子串的首尾两个字母相等。同时如果dp[i + 1][j - 1]
,即矩阵左下方,也就是对应去除首尾字母后的子串,也是回文子串。那么当前字符串一定是回文子串。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/0da4737faf053393bba5fa9de】。文章转载请联系作者。
评论