/**
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:
*/
- #include<stdio.h>
- #include<string.h>
- #define MAX1 25
- #define MAX2 210
- void getPrefix(char input[][MAX2],int k);
- int main()
- {
- int cases,k,i,j,count = 0;//cases个测试用例、每个用例k个串、count表示要输出第几个的用例
- char input[MAX1][MAX2];
- scanf("%d",&cases);
- while(getchar() != '\n');
- while(cases--)
- {
- count++;
- i = 0;
- scanf("%d",&k);
- while(getchar() != '\n');
- j = k;
- while(j--)
- {
- gets(input[i]);
- i++;
- }
- printf("Case %d: ",count);
- getPrefix(input,k);
- }
- return 0;
- }
- void getPrefix(char input[][MAX2],int k)
- {
- int i,minLength = 10000,temp,j;
- bool flag = false;
- //求得最小串长
- for(i=0;i<k;i++)
- {
- temp = strlen(input[i]);
- if(temp < minLength)
- {
- minLength = temp;
- }
- }
- for(i=0;i<minLength;i++)
- {
- for(j=0;j<k-1;j++)
- {
- if(input[j][i] == input[j+1][i])
- {
- continue;
- }
- else
- {
- flag = true;
- break;
- }
- }
- if(!flag)
- {
- printf("%c",input[j][i]);
- }
- }
- printf("\n");
- }
阅读(1450) | 评论(0) | 转发(0) |