题面:
给出若干个字符串,输出这些字符串的最长公共后缀。
输入格式
由若干组输入组成。
每组输入的第一行是一个整数 NN。
NN 为 00 时表示输入结束,否则后面会继续有 NN 行输入,每行是一个字符串(字符串内不含空白符)。
每个字符串的长度不超过 200200。
输出格式
共一行,为 NN 个字符串的最长公共后缀(可能为空)。
数据范围
1≤N≤2001≤N≤200
输入样例:
3 baba aba cba 2 aa cc 2 aa a 0
输出样例:
ba a
链接:
https://www.acwing.com/problem/content/781/
思路:
1.比较两个字符串,然后不断地更新位置
2.从后面开始遍历字符串数组
3.不断更新答案
4.注意边界位置,以及是否要加一减一
代码:
#include<iostream> #include<algorithm>//min函数的库函数 using namespace std; int main() { int n;//n个样例 while(cin>>n,n) { string s,a; cin>>s;//第一个字符串 int max=210; for(int i=1;i<n;i++) { cin>>a;//n-1个字符串 int res=0;//每一次会重置为零 for(int j=0;j<s.size()&&j<a.size();j++) { if(s[s.size()-1-j]==a[a.size()-1-j])//从后面开始遍历 { res++; } else { break; } } max=min(max,res);//保存答案位置 } if(max==0)//如果没有公共后缀 { cout<<endl; } else { cout<<s.substr(s.size()-max)<<endl; } } return 0; }