Description
用一个字符串表示一段基因,例如:“CTATGGGTTT”。两段基因的相似度定义为它们所包含的最大公共子串的长度。例如:“CCTTGG”和“TGGGC”的最大公共子串为“TGG”,它的长度为3,则我们称“CCTTGG”和“TGGGC”的相似度为3。现给定两段基因,要求计算它们的相似度。
Input
输入第一行包含一个正整数N(0<N<100),表示测试数据的数目;接下来N行,每行包含两个字符串(每个字符串长度小于等于20),用一个空格隔开,分别表示给定的两段基因。
Output
对于每组测试数据输出一行,该行包含一个整数,表示给定基因段的相似度。
Sample Input
2
CCCCC TTTTTGGGGGCC
ACTGGG DDD
Sample Output
2
0
1:
#include<stdio.h>
#include<string.h>
int main(){
int n;
char a[1000],b[1000];
int i,j,k,r,mun=0,max=0;
scanf("%d",&n);
while(n--){
scanf("%s",&a);
scanf("%s",&b);
for(i=0;a[i]!='\0';i++){
for(j=0;b[j]!='\0';j++){
mun=0;
if(a[i]==b[j]){
for(k=i,r=j;a[k]!='\0',b[r]!='\0';k++,r++){
if(a[k]!=b[r]) break;
else mun++;
}
}
if(max<mun) max=mun;
}
}
printf("%d\n",max);
max=0;
}
return 0;
}
2:
#include<stdio.h>
#include<string.h>
int main(){
int N;
int c,max,k,t,i,j;
char a[50],b[50];
scanf("%d",&N);
while(N--){
scanf("%s",&a);
scanf("%s",&b);
c=0;
max=0;
for(i=0;a[i]!='\0';i++){
for(j=0;b[j]!='\0';j++){
if(a[i]==b[j]){
for(k=i,t=j;a[k]!='\0',b[t]!='\0';k++,t++){
if(a[k]!=b[t]) break;
else c++;
}
if(max<c) max=c;
c=0;
}
}
}
printf("%d\n",max);
}
}
注意:c每次都要等于0;