hdu-2328(暴力枚举+kmp)
题意:给你n个字符串,问你这n个串的最长公共子串
解题思路:暴力枚举任意一个字符串的所有子串,然后暴力匹配,和hdu1238差不多的思路吧,这里用string解决的;
代码:
#include<iostream> #include<string> #include<cstdio> #include<algorithm> using namespace std; string t; int main() { int n; string a[4050]; ios::sync_with_stdio(0); while((cin>>n)&&n) { int cot; int maxx=0; for(int i=1;i<=n;i++) cin>>a[i]; int len=a[1].size(); for(int i=0;i<len;i++) { for(int j=1;j<=len-i;j++) { if(j<maxx) continue; cot=0; for(int k=2;k<=n;k++) { if(a[k].find(a[1].substr(i,j))==string::npos) break; else cot++; } if(cot==n-1) { // cout<<a[1].substr(i,j)<<endl; if(j>maxx) { maxx=j;t=a[1].substr(i,j); } else if(j==maxx) { if(t>a[1].substr(i,j)) t=a[1].substr(i,j); } } } } if(maxx==0) cout<<"IDENTITY LOST"; else cout<<t; cout<<endl; } }