最长回文子串
Sunny-117 opened this issue · comments
题目链接:https://leetcode.cn/problems/longest-palindromic-substring/description
时间复杂度:O(n^2)
/**
* @param {string} s
* @return {number}
*/
var longestPalindrome = function(s) {
let ans='';
let n=s.length;
let f=new Array(n).fill(0).map(() => new Array(n).fill(0));
for(let i=0;i<n;i++) f[i][i]=1;
for(let len=2;len<=n;len++)
{
for(let i=0;i+len-1<n;i++)
{
let j=i+len-1;
if(s[i]===s[j]&&f[i+1][j-1]+2===j-i+1) {
f[i][j]=f[i+1][j-1]+2;
}
}
}
let l=n,r=0;
for(let i=0;i<n;i++)
{
for(let j=0;j<n;j++)
{
if(f[i][j]===j-i+1)
{
if(j-i>r-l)
{
l=i,r=j;
}
}
}
}
return s.substring(l,r+1);
};
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
let max = ''
for(let i = 0; i < s.length; i++){
helper(i,i)
helper(i,i + 1)
}
function helper(left, right){
while(left >= 0 && right < s.length && s[left] === s[right]){
left--
right++
}
const maxStr = s.slice(left + 1, right - 1 + 1) //这里+1-1只是为了便于理解
if(maxStr.length > max.length){
max = maxStr
}
}
return max
};