给出若干个字符串,输出这些字符串的最长公共后缀。
输入格式
由不超过 5 组输入组成。
每组输入的第一行是一个整数 𝑁。
𝑁 为 0 时表示输入结束,否则后面会继续有 𝑁 行输入,每行是一个字符串(字符串内不含空白符)。
每个字符串的长度不超过 200。
输出格式
每组数据输出一行结果,为 𝑁 个字符串的最长公共后缀(可能为空)。
数据范围
1≤𝑁≤200
输入样例:
3
baba
aba
cba
2
aa
cc
2
aa
a
0
输出样例:
ba
a
#include <iostream>
using namespace std;
const int N = 200;
int n;
string str[N]; //数组长度最好用常量
int main()
{
while(cin >> n, n){ //n不等于0则循环
int len = 1000;
for (int i = 0; i < n; i ++ ){ //读入n个字符串
cin >> str[i];
if(str[i].size() < len) len = str[i].size(); //求最小字符串长度值
}
while(len){ //比较后len位
bool success = true;
for(int i = 1; i < n; i++){ //遍历数组
bool is_same = true;
for(int j = 1; j <= len; j++){ //控制串与串比较的位
if(str[0][str[0].size() - j] != str[i][str[i].size() - j]){ //字符串数组后面的串和第一个串比较,从后往前比len个
is_same = false;
break;
}
}
if(!is_same){
success = false;
break;
}
}
if(success) break; //所有字符串后len个字符相同
len --; //减少len长度
}
cout << str[0].substr(str[0].size() - len) << endl;
}
}