#19
Palindrome DP (expand around center)
Expand-Around-CenterReturn the longest palindromic substring of a given string.
function longestPalindrome(s: string): string {
let start = 0, maxLen = 0;
const expand = (l: number, r: number): void => {
while (l >= 0 && r < s.length && s[l] === s[r]) { l--; r++; }
const len = r - l - 1;
if (len > maxLen) { maxLen = len; start = l + 1; }
};
for (let i = 0; i < s.length; i++) {
expand(i, i); // odd-length center
expand(i, i + 1); // even-length center
}
return s.substring(start, start + maxLen);
}def longest_palindrome(s)
start = 0
max_len = 0
expand = lambda do |l, r|
while l >= 0 && r < s.length && s[l] == s[r]
l -= 1
r += 1
end
len = r - l - 1
if len > max_len
max_len = len
start = l + 1
end
end
s.length.times do |i|
expand.call(i, i) # odd-length center
expand.call(i, i + 1) # even-length center
end
s[start, max_len]
end