AcWing 779. 最长公共字符串后缀(详细注释,两层for循环判断)
原题链接
困难
作者:
九里今天学点什么呢
,
2021-04-21 10:16:42
,
所有人可见
,
阅读 274
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main(){
int n;
while(cin>>n,n){
string s,a;
//最长的公共后缀位数,初值置为201
int Max=201;
cin>>s;
for(int i=1;i<n;i++){
//每一个输入的a与第一个输入的s进行比对后,公共后缀位数为cnt;
int cnt=0;
cin>>a;
for(int j=0;j<s.size()&&j<a.size();j++){//以s和a中的最小位数为循环次数上界
//如果当前倒数第j位相同,那么公共后缀位数加一
if(s[s.size()-1-j]==a[a.size()-1-j])cnt++;
//出现不相等的位,则跳出循环,s与a公共后缀位数为cnt
else break;
}
//最长的公共后缀位数为 上一次位数 与 本次位数 取最小值
Max=min(Max,cnt);
}
//输出公共后缀子串
cout<<s.substr(s.size()-Max)<<endl;
}
}