共同的前缀
1、题目内容
Description
给你K个字符串,请求出它们的最长公共前缀。 输入 第一行是一个整数N,表示测试样例的个数。 每个测试样例的第一行是一个整数K(2 <= k <= 20),表示有多少个字符串;以后每行是一个字符串,每个字符串的长度不超过200个字符。 输出 每行输出一个样例的结果。先输出“Case #: ”,其中’#’为样例的序号(从1开始),冒号为英文冒号,后接一个空格;然后是对应样例的结果。如果没有公共前缀,则无需输出前缀,但Case信息仍需要输出。
Sample Input
2
3
ACD
ACDEF
ACDFE
2
ABC
BCD
Sample Output
Case 1: ACD
Case 2:
2、题目分析
这个题目:首先就是case的输出,采用for语句模式实现多样例比较方便对case输出。在寻找共同前缀的时候,我们可以把第一个字符串当作共同的前缀,然后将后面的字符串不断与第一个字符串去比较,每次比较需要一个字符一个字符的去比,当遇到字符不同的时候,设置截止符号‘\0’并退出当前比较。
3、参考代码
#include<stdio.h>
#include<string.h>
int main()
{
int n,t;
scanf("%d",&n);
for(t=1;t<=n;t++)
{
int i,k,m,n,j;
char common[201]; //用来做比较的第一个字符串
char str[201];
scanf("%d",&k);
for(i=0;i<k;i++)
{
if(i==0) //尚未开始比较前,把第一个字符串当作共同的前缀
{
scanf(" %s",common);
n=strlen(common);
}
else
{
scanf(" %s",str); //此后,每输入一个字符串就对字符串序列依个比较一次
for(j=0;j<n;j++)
{
if(str[j]!=common[j])//当出现字母不同时,设置截止符号‘\0’并退出
{
common[j]='\0';
}
}
}
}
printf("Case %d: %s\n",t,common); //按照题目要求输出
}
return 0;
}