var longestPalindrome = function(s) {
const dp = Array.from({length: s.length + 1}, () => [])
let max = s[0]
s.split('').forEach((char, i) => {
dp[1].push({
str: char,
start: i,
end: i
})
if (s.length > 1 && i !== s.length - 1 && s[i] === s[i+1]) {
dp[2].push({
str: char + s[i + 1],
start: i,
end: i + 1
})
max = char + s[i + 1]
}
})
for (let i = 1; i <= s.length-2; i++) {
dp[i].forEach(({str, start, end}) => {
if (start === 0 || end === s.length -1) {
dp[i+2].push({str, start, end})
return
}
const prevChar = s[start -1]
const nextChar = s[end + 1]
if (prevChar === nextChar) {
dp[i+2].push({
str: prevChar + str + nextChar,
start: start - 1,
end: end + 1
})
max = prevChar + str + nextChar
} else {
dp[i+2].push({str, start, end})
}
})
}
return max
};
var longestPalindrome = function(s) {
const dp = Array.from(
{length: s.length},
(_, i) => Array.from({length: s.length}, (_, j) => (i === j ? s[i] : false)))
let maxPalindrome = s[0]
s.split('').forEach((c, i) => {
if(i === s.length - 1) return
if(c === s[i + 1]) {
dp[i][i+1] = c + c
maxPalindrome = c + c
}
})
for (let i=1; i <s.length -1 ; i++) {
for (let j=i; j <s.length - 1 ; j++) {
const startIdx = i < j ? i : j
const endIdx = i < j ? j : i
const prevChar = s[startIdx - 1]
const nextChar = s[endIdx + 1]
if (dp[i][j] && s[startIdx - 1] === s[endIdx + 1]) {
const newPalindrome = prevChar + dp[i][j] + nextChar
dp[startIdx-1][endIdx+1] = newPalindrome
dp[endIdx+1][startIdx-1] = newPalindrome
maxPalindrome = maxPalindrome.length < newPalindrome.length ?
newPalindrome:
maxPalindrome;
}
}
}
return maxPalindrome;
};
var longestPalindrome = function(s) {
const dp = Array.from(
{length: s.length},
(_, i) => Array.from({length: s.length}, (_, j) => (i === j ? s[i] : false)))
let maxPalindrome = s[0]
s.split('').forEach((c, i) => {
if(i === s.length - 1) return
if(c === s[i + 1]) {
dp[i][i+1] = c + c
maxPalindrome = c + c
}
})
for (let diff = 0; diff < s.length; diff++) {
for (let j = 1; j < s.length - diff ; j++) {
const startIdx = j
const endIdx = j + diff
const prevChar = s[startIdx - 1]
const nextChar = s[endIdx + 1]
if (dp[startIdx][endIdx] && s[startIdx - 1] === s[endIdx + 1]) {
const newPalindrome = prevChar + dp[startIdx][endIdx] + nextChar
dp[startIdx-1][endIdx+1] = newPalindrome
maxPalindrome = maxPalindrome.length < newPalindrome.length ?
newPalindrome:
maxPalindrome;
}
}
}
return maxPalindrome;
};