求一个字符串的最长子串,Manacher算法是一种O(n)的算法,很给力!
s2[0] = '$',是避免在循环中对数组越界的检查。
老大的代码:
http://www.cnblogs.com/BigBallon/p/3816890.html
详细的图解:
http://blog.csdn.net/xingyeyongheng/article/details/9310555
模板题,没有什么好说的。Manacher算法本身确实是要好好理解体会的。
1 #define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 8 const int maxn = 110000 + 20; 9 char s1[maxn], s2[maxn * 2]; 10 int p[maxn * 2]; 11 12 void init(char s1[], char s2[]) 13 { 14 s2[0] = '$', s2[1] = '#'; 15 int j = 2; 16 for(int i = 0; s1[i] != '