首页 > 代码库 > 最长回文子串---Manacher算法
最长回文子串---Manacher算法
百度:Manacher算法
代码
#include <iostream>#include <string>#include <cstring>#include <algorithm>using namespace std;int MANACHER(const string &str){ string data; int len = str.length(); data+="$#"; for (int i=0;i<len;i++) { data+=str[i]; data+=‘#‘; } data+=‘@‘; //到此预处理完成 len = data.length(); int *temp = new int[len+2]; memset(temp,0,sizeof(temp)); int MaxIndex=0; int i=1,index=0,res=0; for(;i<len;i++) { if (MaxIndex>i) { temp[i]=(MaxIndex-i<temp[2*index-i]?MaxIndex-i:temp[2*index-i]); } else temp[i]=1; while (data[i-temp[i]] == data[i+temp[i]]) { temp[i]++; } if(i+temp[i] > MaxIndex) { MaxIndex = i+temp[i]; index=i; } res = (res>temp[i]?res:temp[i]); } delete[]temp; return res-1;}int main(){ string str ; int n; while(cin >> n) { while (n--) { cin >> str; cout << MANACHER(str)<<endl; } } return 0;}
最长回文子串---Manacher算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。