- 作用
- 马拉车算法是解决最长回文子串问题的线性算法,也可以解决最长回文子串计数问题
- 中心扩展算法
- 模拟回文串的中心,根据回文串的对称性向它的两边逐个扩展,不断的判断左边和右边是否相等,直到扩展到最大的那个以某个中心为中心的回文串
const longestPalindromicSubstring = s => { const sn = ["^", "#", ...[...s].join("#"), "#", "$"] let ans = 0 for (let i = 1; i < sn.length - 1; i++) { let ext = 0 while (sn[i - ext -1] == sn[i + ext + 1]) ext++ if (ext > ans) = ans = ext } return ans }
- 步骤
- 在所有的字符中间都插入#号,不会改变字符串的性质,但使得每个回文串都变成奇数个字符的长度
- 为了处理下标越界的问题,可以在字符串开头加上^,结尾加上$,两个特殊字符,使得循环在碰到这两个符号的时候退出
- ……