题目
给出若干个字符串,输出这些字符串的最长公共后缀。
- 输入格式
由若干组输入组成。
每组输入的第一行是一个整数 N。
N 为 0 时表示输入结束,否则后面会继续有 N 行输入,每行是一个字符串(字符串内不含空白符)。
每个字符串的长度不超过 200。
- 输出格式
共一行,为 N 个字符串的最长公共后缀(可能为空)。 - 数据范围
1≤N≤200 - 输入样例:
3
baba
aba
cba
2
aa
cc
2
aa
a
0
- 输出样例:
ba
a
代码
#include <iostream>
using namespace std;
string s[210];
int n;
int main(){
while(cin>>n,n){//输入0结束
int len=999999;//记录最短字符串长度
for(int i=0;i<n;i++){
cin>>s[i]; //输入n个字符串
int len1=s[i].length();
if(len1<len) len=len1; //若有更小,则更新
}
// cout<<len<<endl;
while(len){
int success=1;// 记录长度为len时是否比对成功,若失败则len-1
for(int i=1;i<n;i++){//拿第1-n个字符串与第0个字符串比对
int cmp=1;//记录第i个字符串比对情况
for(int j=1;j<=len;j++){//比对后缀片段
if(s[0][s[0].length()-j] != s[i][ s[i].length()-j]){
cmp=0;
break;
}
}
if(cmp==0){//如果第i个字符串比对失败,则退出
success=0;
break;
}
}
if(success) break;
len--;//len-1,再次重新比对
}
cout<<s[0].substr(s[0].length()-len)<<endl;
}
return 0;
}