题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
总结
SDC1:Manacher’s 算法详解
SDC2:从中心拓展的思路,分为从 i 和 i 开始比较 和从 i 和 i+1 开始比较,区分奇数回文和偶数回文两种
Sample & Demo Code 1
class Solution {
// 马拉车算法
public String longestPalindrome(String s) {
String T = preProcess(s);
int n = T.length();
int[] P = new int[n];
int C = 0, R = 0; //R 代表利用对称性,以C为中心的最右 (通过i+P[i]得到)
for (int i = 1; i < n - 1; i++) {
// int i_mirror = 2 * C - i; //下面的写法一样
int i_mirror = C - (i - C);
if (R > i)
P[i] = Math.