题目链接
《算法笔记》上面的方法有点复杂,可以用一种简单一点的思路。代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
char * isKu(char * a, char * b){
int len1=strlen(a),len2=strlen(b),i;
for (i=0; i<min(len1,len2) && !strcmp(a+len1-1-i,b+len2-1-i) ; i++);
return a+len1-i;
}
int main(){
int n;
scanf("%d",&n);
getchar();
char sentence[300],ku[300];
cin.getline(sentence,300);
strcpy(ku,sentence);
for (int i=0; i<n-1; i++){
cin.getline(sentence,300);
strcpy(ku,isKu(ku,sentence));
}
if (strlen(ku)) printf("%s",ku);
else printf("nai");
}
代码的思路是:定义一个函数isKu,参数是两个字符型数组,返回值是这两个数组末尾共有的最长字符串。(原本设想返回值是布尔型,后来干脆直接返回一个字符串更方便)。主程序的思路就是,便读取字符串,便和上一个共有字符串对比。这样耗时短,占用空间也少。