var longestPalindrome = function(s) {
let len = s.length;
let result;
let i,j,L;
let dp=Array(len).fill(0).map(x=>Array(len).fill(0));
if(len<=1){
return s
}
// 只有一个字符的情况是回文
for(i = 0;i<len;i++){
dp[i][i] = 1
result = s[i]
}
// L是i和j之间的间隔数(因为间隔数从小到大渐增,所以大的间隔数总能包含小的间隔数)
// i j
// abcdcba.length = L 所以 L = j-i+1; => j = i+L-1;
for ( L = 2; L <= len; L++) {
// 从0开始
for ( i = 0; i <= len - L; i++) {
j = i + L - 1;
if(L === 2 && s[i] === s[j]) {
dp[i][j] = 1;
result = s.slice(i, i + L);
}else if(s[i] === s[j] && dp[i + 1][j - 1] === 1) {
dp[i][j] = 1
result = s.slice(i, i + L);
}
}
}
return result;
}
console.log(longestPalindrome('cbabab'));
复杂度分析:
- 时间复杂度O(n^2)
- 空间复杂度O(n^2)
5. 最长回文子串
最新推荐文章于 2025-03-25 14:24:13 发布