AcWing 779. 最长公共字符串后缀
原题链接
简单
作者:
Saber__
,
2024-10-29 16:26:24
,
所有人可见
,
阅读 3
#include <iostream>
#include <string>
using namespace std;
const int N = 200;
int n;
string str[N];
int main()
{
while(cin >> n, n)
{
//输入字符串时,找出最短字符串
int len = 1000;
for(int i = 0; i < n; ++i)
{
cin >> str[i];
if(len > str[i].size())
len = str[i].size();
}
//枚举后缀大小,最大长度为最小字符串
while(len)
{
bool success = true;
//枚举字符串,因为与第一个字符串毕竟,所以从第二个字符串开始枚举比较
for(int i = 1; i < n; ++i)
{
bool is_same = true;
//枚举后缀长度
for(int j = 1; j<=len; ++j)
{
//与第一个字符串进行比较, 从后往前枚举len个长度的后缀
if(str[0][str[0].size() - j] != str[i][str[i].size() - j])
{
is_same = false;
break;
}
}
//如果len中某一个字符串后缀枚举失败,意味着len的长度不匹配,退出内循环
if(!is_same)
{
success = false;
break;
}
}
//成功了,代表每个字符串的len长度都匹配,不成功说明len长度太长,所以-1
if(success) break;
--len;
}
//因为是跟str[0]比较的,所以这时后缀都已经相同了
cout << str[0].substr(str[0].size() - len) << endl;
}
return 0;
}