LeetCode-最长回文子串
LeetCode刷题笔记
LeetCode题库:https://leetcode-cn.com/problemset/all/
最长回文子串
给定字符串s
,找出其最长回文子串
思路
利用动态规划的思想,从短的子串开始判断是否为回文子串,直到判断完所有子串,记录判断结果。
长子串是由多个短子串组成,所以判断的过程中可以直接使用短子串的判断结果,减少判断次数。
代码实现
var longestPalindrome = function(s) {
var dp = [];
// 初始化数组
for (let i in s) {
dp[i] = [];
}
var result = '';
for (let i = 0; i < s.length; i++) {
for (let j = 0; j <= i; j++) {
if (i - j < 3 && s[i] === s[j]) {
// 子串长度不大于3时,首尾两个字符相等即是回文子串(a、aa、aba)
dp[j][i] = true;
} else if (s[i] === s[j] && dp[j + 1][i - 1]) {
// 长度大于3,首尾字符相等且去掉首尾字符后也是符合条件的才是回文子串(abba、abcba)
dp[j][i] = true;
} else {
dp[j][i] = false;
}
if (dp[j][i]) {
// 获取当前最长回文子串
var str = s.slice(j, parseInt(i) + 1);
result = result.length >= str.length ? result : str;
}
}
}
return result;
};
执行结果
执行用时 | 内存消耗 |
---|---|
1900 ms | 65.7 MB |