链接:点击打开链接
让你找出所有字符串中公共的最长子串。我是用了String几个函数,用DFS都可以过,就是一个枚举加暴力搜索就能过。。。。
#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
using namespace std;
string str[110],str1;
int n,len,m,y;
void dfs(){
int j;
for(j=1;j<n;j++)
if(str[j].find(str1)==-1)//查找str1是否在str[j]中出现,有则输出出现的位置,没有输出-1
break;
if(j==n){
y=1;return; }
char c;
for(j=0;j<len/2;j++){
c=str1[j];
str1[j]=str1[len-j-1];
str1[len-j-1]=c;
}
for(j=1;j<n;j++)
if(str[j].find(str1)==-1)
break;
if(j==n)
{
y=1;
return;
}
}
int main(){
int i,j,t,x;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
len=200;
for(i=0;i<n;i++){
cin>>str[i];
if(len>str[i].size()){
len=str[i].size();
x=i;
}
}
m=len;
str1=str[0];
str[0]=str[x];
str[x]=str1;
while(len--){
for(i=0;i+len<=m;i++){
str1=str[0].substr(i,len);//把字符串str[0]从i到len之间的字符赋值给str
y=0;
dfs();
if(y)
break;
}
if(y)
break;
}
printf("%d\n",len);
}
return 0;
}
#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
using namespace std;
int main(){
int i,j,len,n,m,t,x,y;
string str[110],str1;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
len=200;
for(i=0;i<n;i++){
cin>>str[i];
if(len>str[i].size()){
len=str[i].size();
x=i;
}
}
m=len;
str1=str[0];
str[0]=str[x];
str[x]=str1;
y=0;
while(len--){
for(i=0;i+len<=m;i++){
str1=str[0].substr(i,len);
for(j=1;j<n;j++)
if(str[j].find(str1)==-1)
break;
if(j==n){
y=1;
break;
}
char c;
for(j=0;j<len/2;j++){
c=str1[j];
str1[j]=str1[len-j-1];
str1[len-j-1]=c;
}
for(j=1;j<n;j++)
if(str[j].find(str1)==-1)
break;
if(j==n)
{
y=1;
break;
}
}
if(y)
break;
}
printf("%d\n",len);
}
return 0;
}