AcWing 779. 最长公共字符串后缀
原题链接
困难
作者:
Samuely
,
2022-12-10 00:49:14
,
所有人可见
,
阅读 184
C++版本
思路核心是转换成了二维数组s_list中对于每个字符串s的j列元素是否相等
#include<iostream>
using namespace std;
// 对于变长数组的问题就定义一个大数组就可以
int main()
{
int n;
while(cin >> n, n!=0)
{
string srr[1000];
string str;
int min=9999;
for (int i=0; i<n; i++)
{
cin >> str;
// 逆序存储
for(int j=str.size()-1; j>=0; j--)
srr[i] += str[j];
if (str.size()<min) min = str.size();
}
string temp = "", sub = "";
int flag = 0;
for (int j=0; j<min; j++)
{
for (int i=0; i<n; i++) temp += srr[i][j];
char c = temp[0];
flag = 0;
for (int i=0; i<temp.size(); i++)
{
if (c != temp[i]) flag=1;
}
// 字符相等
if (flag == 0)
{
sub += c;
temp = "";
}
else break;
}
if (sub == "") cout << endl;
else
{
for (int i = sub.size()-1; i>=0; i--) cout << sub[i];
cout << endl;
}
}
return 0;
}
python版本
while(True):
N = int(input())
if N == 0:
break
s_list = []
for i in range(N):
t = input().strip()[::-1]
s_list.append(t)
s_list_len = [len(s) for s in s_list]
temp = []
sub = []
for j in range(0, min(s_list_len)):
for i in range(0, len(s_list)):
temp.append(s_list[i][j])
if len(set(temp)) == 1:
sub.append(temp[0])
else:
break
temp = []
if len(sub) == 0:
print()
else:
for c in sub[::-1]:
print(c, end='')
print()