poj1226(kmp算法,后缀数组)
2011-07-22 21:37
453 查看
1.kmp解法
算法及流程请参考matrix67博文:http://www.matrix67.com/blog/tagscloud
时间关系先附代码,不解释
2.后缀数组(字符串处理的有力工具)
算法请参考byvoid的博文:http://www.byvoid.com/blog/lcs-suffix-array/
代码编辑中……
算法及流程请参考matrix67博文:http://www.matrix67.com/blog/tagscloud
时间关系先附代码,不解释
#include<iostream> #include<cstdio> #include<algorithm> #include<string> using namespace std; #define N 110 int next = {-1}; string M ,RM ; //M[p].substr(s,e-s+1)为模式串 //M[i],i<>p为主串 bool kmp(string *M,int p,int k,int s,int e) { //!!!计算next[i+1] next[s]=s-1; int i,j; for(i=s,j=s-1; i<e;) { if(M[k][i+1]==M[k][j+1])next[++i]=++j; else { if(j!=s-1)j=next[j]; else next[++i]=s-1; } } //!!!匹配 for(i=-1,j=s-1; i!=M[p].size()-1&&j!=e;) { if(M[p][i+1]==M[k][j+1])i++,j++; else { if(j!=s-1)j=next[j]; else i++; } } //!!!匹配成功!!! return j==e; } int n; int p; int getAns() { int len=M[p].size(); for(int i=len; i>0; i--) { for(int j=0; j+i-1<len; j++) { int k; for(k=0; k<n; k++) { if(k!=p) { if( !( kmp(M,k,p,j,i+j-1) || kmp(RM,k,p,j,i+j-1) ) )break; } } if(k==n)return i; } } return 0; } int main() { // freopen("data.in","r",stdin); int t; cin>>t; while(t--) { cin>>n; p=0; for(int i=0; i<n; i++) { cin>>M[i]; RM[i]=M[i]; reverse(RM[i].begin(),RM[i].end()); if(M[p].size()>M[i].size())p=i; } int ans=getAns(); reverse(M[p].begin(),M[p].end()); ans=max(ans,getAns()); cout<<ans<<endl; } return 0; }
2.后缀数组(字符串处理的有力工具)
算法请参考byvoid的博文:http://www.byvoid.com/blog/lcs-suffix-array/
代码编辑中……
相关文章推荐
- POJ 1226 Substrings KMP暴力 或 后缀数组
- poj 1226 Substrings (二分+后缀数组)
- POJ 1226 Substrings(后缀数组)
- POJ 1226 Substrings 暴力枚举+KMP算法
- poj 1226 Substrings (后缀数组)
- kmp算法练习 poj 1226 poj 1961
- poj 1226 Substrings (后缀数组)
- poj 1226 Substrings (后缀数组应用)
- POJ-1226 Substrings(后缀数组)
- POJ 1226 Substrings(后缀数组)
- POJ 1226 Substrings (后缀数组)
- poj 1226 Substrings 求n个字符串的最长公共子串(这里可以是反序相同) 后缀数组
- POJ 1226 Substrings (后缀数组)
- poj 1226 求多串最长公共子串 或 回文子串 KMP&&strstr&&后缀数组
- poj 3693 Maximum repetition substring(后缀数组)
- POJ_1226_KMP
- POJ 3729 Facer’s string(后缀数组)
- POJ 3261 Milk Patterns(后缀数组)
- POJ_P3415 Common Substring(后缀数组+单调栈)
- poj1743 Musical Theme(后缀数组)