思路筆記:
上述情況1和情況2又可以歸結為:【i』的回文半徑】和【r-i的距離】中小的那個就是i的回文半徑。
#include#include#includeusing namespace std;
string manacherstring(string str)
return res;
}int min(int a, int b)
int max(int a, int b)
int manacher(string str)
if (i + parr[i] > r)
max = max(max, parr[i]);
} return max-1;
}int main()
return 0;
}
應用:如果向字串後面追加字串成為回文串,怎麼新增的字元最少。
例子:abc12321,則新增後abc12321cba思路:它就是在求包含最後乙個字元情況下最長回文串是多少,再將前面不是的部分逆序過來就是答案。其實就是在找回文右邊界(r),直到回文右邊界到最後乙個字元確定當前的c,利用r將l求出來,然後原字串0~l位置的逆序追加上去即可。
馬拉車演算法
馬拉車演算法是一種計算最長回文子串的演算法,以其優秀的線性複雜度聞名於世,相較於o n 2 o n 2 o n2 的dpdp dp演算法和會被特殊資料卡到o n 2 o n 2 o n2 的暴力演算法,馬拉車演算法無疑是求解最長回文子串的最優選擇。最長回文子串分為偶數串和奇數串,為了避免這些問題,馬...
馬拉車演算法
manacher char s maxn 1 int n,hw maxn 1 int l maxn 1 r maxn 1 void manacher char a n len 2 2 s n 0 int maxr 0,m 0 for int i 1 i n i manacher 題意在給定的字串中找...
馬拉車演算法
馬拉車演算法查詢 字串的最大回文子串。其演算法本質上是中心擴充套件法。中心擴充套件法 vectorv strlen,0 v i 是指以i為中心的回文字串長度的半徑 for int i 1 i strlen 1 i while str i 1 v i str i 1 v i v i 不考慮越界 而馬拉...