Palindromic Substrings
MediumTwo PointersStringDynamic Programming
Solution
export function countSubstrings(s: string): number {
function manachers(str: string) {
const s = `#${[...str].join('#')}#`;
const n = s.length;
const p = new Array<number>(n).fill(0);
let [center, right] = [0, 0];
for (let i = 0; i < n; i++) {
p[i] = right >= i ? Math.min(right - i, p[2 * center - i]) : 0;
while (i + p[i] + 1 < n && 0 <= i - p[i] - 1 && s[i + p[i] + 1] === s[i - p[i] - 1]) {
p[i] += 1;
}
if (right < i + p[i]) {
right = i + p[i];
center = i;
}
}
return p;
}
return manachers(s).reduce((acc, v) => acc + Math.floor((v + 1) / 2), 0);
}