给出若干个字符串,输出这些字符串的最长公共后缀。
输入格式
由不超过 5组输入组成。
每组输入的第一行是一个整数 N。
N为 0 时表示输入结束,否则后面会继续有 N行输入,每行是一个字符串(字符串内不含空符)。
每个字符串的长度不超过 200。
输出格式
每组数据输出一行结果,为 N个字符串的最长公共后缀(可能为空)。
数据范围
1≤N≤200
输入样例:
3
baba
aba
cba
2
aa
cc
2
aa
a
0
输出样例:
ba
a
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 200;
int n;
string str[N];
int main()
{
while (cin >> n, n)
{
for (int i = 0; i < n; i ++ )
{
cin >> str[i];
reverse(str[i].begin(), str[i].end());//翻转
}
sort(str, str + n);
string res;
for (int i = 0; i < min(str[0].size(), str[n - 1].size()); i ++ )
if (str[0][i] == str[n - 1][i]) res = str[0][i] + res;
else break;
cout << res << endl;
}
return 0;
}
后缀做法:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
while(cin >> n, n)
{
string s, a;
int MAX = 999999;
cin >> s;
for(int i = 1; i < n; ++ i)
{
int res = 0;
cin >> a;
for(int j = 0; j < a.size() && j < s.size(); ++ j)
if(a[a.size() - 1 - j] == s[s.size() - 1 - j]) res++;
else break;
MAX = min(MAX, res);
}
if(MAX) cout << s.substr(s.size()-MAX) << endl;
else cout << endl;
}
return 0;
}