AcWing 778. 字符串最大跨距
原题链接
简单
作者:
下定决心排除万难
,
2024-11-15 21:49:16
,
所有人可见
,
阅读 1
//自己写对了,开心
//就是想到了,先找最短的字符串,答案一定在这个上面
//然后去寻找匹配的最短数目,在最短字符串上从第a.size()-最短数目开始到a.size(),一一打印处理,然后遇到最短数目打印空格即可
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
while(cin>>n&&n!=0)
{
vector<string> a(n);
int b[n]={0},flag=0,count=1e5;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[i]=a[i].size();
if(b[i]<=count)
{
flag=i;
count=b[i];
}
}
// 计算其他字符串与最小长度字符串的最长公共后缀
int cri = b[flag]; // 初始化为最小长度字符串的长度
for (int i = 0; i < n; i++) {
if (i == flag) continue; // 跳过最小长度字符串
int count = 0;
// 从后向前比较字符
while (count < b[flag] && count < b[i] && a[i][b[i] - 1 - count] == a[flag][b[flag] - 1 - count]) {
count++;
}
// 更新最小公共后缀长度
cri = min(cri, count);
}
// 输出结果
if (cri == 0) {
cout << " " << endl; // 没有公共后缀的情况
} else {
for(int k=b[flag]-cri;k<b[flag];k++)
{
cout<<a[flag][k];
}
cout << endl;
}
}
return 0;
}