以每个字符为中心,分两种情况向两边扩展。
manacher算法参见http://www.cnblogs.com/houkai/p/3371807.html
AC代码:
#include <string> #include <cstdio> #include <iostream> using namespace std; int main(){ string s; getline(cin,s); int maxlen(0); for(int i = 0;i < s.size();i++){ int m(i - 1),n(i + 1); for(;m >= 0 && n < s.size();m--,n++){ if(s[m] != s[n]){ m++; n--; break; } } if(n == s.size() || m < 0){ m++; n--; } if(n - m + 1 > maxlen) maxlen = n - m + 1; m = i; n = i + 1; for(;m >= 0 && n < s.size();m--,n++){ if(s[m] != s[n]){ m++; n--; break; } } if(n == s.size() || m < 0){ m++; n--; } if(n - m + 1 > maxlen) maxlen = n - m + 1; } printf("%d\n",maxlen); return 0; }
时间: 2024-10-17 20:40:21