题目描述
给出若干个字符串,输出这些字符串的最长公共后缀。
输入格式
由若干组输入组成。
每组输入的第一行是一个整数N。
N为0时表示输入结束,否则后面会继续有N行输入,每行是一个字符串(字符串内不含空白符)。
每个字符串的长度不超过200。
输出格式
共一行,为N个字符串的最长公共后缀(可能为空)。
数据范围
1≤N≤200
样例
输入样例:
3
baba
aba
cba
2
aa
cc
2
aa
a
0
输出样例:
ba
a
最长后缀的长度显然是小于等于最小的字符串的长度,因此我们在读入字符串时实时更新一下最小字符串长度,检查后缀长度从这个最小的字符串长度开始,直到满足要求为止,输出s[0].substr(s[0].size()-len)即可。
C++ 代码
#include <iostream>
using namespace std;
const int N=200;
int main(){
string s[N];
int n;
while(cin>>n,n){
int i;
int len=1000;
for(i=0;i<n;i++){
cin>>s[i];
if(s[i].size()<len)
len=s[i].size();
}
while(len){
bool success = true;
bool is_same=true;
for(int j=1;j<=len;j++){
for(i=1;i<n;i++)
if(s[0][s[0].size()-j]!=s[i][s[i].size()-j])
{
is_same=false;
break;
}
if(!is_same)
{
success=false;
break;
}
}
if(success)
break;
len--;
}
cout<<s[0].substr(s[0].size()-len)<<endl;
}
return 0;
}