#211-[Manacher]最长回文串

Description

给一个字符串,输出它的最长回文子串长度。

Input

一行一个字符串。

Output

一行一个整数表示长度。

abbabbaabbabaab
  • Sample Input

10
  • Sample Output

HINT

len≤1000000

Updated By MCHacker

马拉车模板

#include 
#include 
#include 
#include 

using namespace std;

string manacher(string str) {
	string s = "@|";
	for (int i=0; i dp(s.size());
	int m=0, id=0, mx=0, center=0;
	for (int i=1; ii) dp[i] = min(dp[(id<<1)-i], m-i);
		else dp[i] = 1;
		while (s[i+dp[i]]==s[i-dp[i]]) ++dp[i]; // 接下来直接暴力
		if (m>1, mx-1); // 返回最长回文串
}
int main() {
	string str; cin >> str;
	printf("%d", manacher(str).size());
	return 0;
}

 

你可能感兴趣的:(刷题)