题目描述
个人做法是直接逐个遍历每个字符串的对应位置的字母,查看是否相同
若相同则遍历下一个,否则跳出循环并输出
时间复杂度
O(n²)
C++ 代码
#include<iostream>
#include<string>
#include<algorithm>//调用reverse函数
using namespace std;
int main() {
string c1, c2, c3;
char c;
int n = 1;
while (cin >> n, n != 0) {
string s[201];
int min = 201,ans=0;
for (int i = 0; i < n; i++) {
cin >> s[i];
reverse(s[i].begin(), s[i].end());//接收后直接翻转方便遍历
if (min > s[i].length())min = s[i].length();
}
if (n == 1)cout << s[0] << endl;
else {
for (int i = 0; i < min; i++) {
for (int j = 0; j < n; j++) {
if (s[0][i] != s[j][i]) {
min = 0;
break;
}
}
if(min)ans += 1;
}
reverse(s[0].begin(), s[0].begin() + ans);
cout << s[0].substr(0,ans) << endl;
}
}
return 0;
}
python 代码
主要利用pyhton切片的性质
a=1
while a!=0:
l1,min,sum=0,201,0
a=eval(input())
if a==0:
break
s=[]
for i in range(a):
s1=input()
if len(s1)<min:min=len(s1)
s.append(s1)
i=1
if a==1:
print(s[0])
continue
while min!=0:
for j in range(1,a):
if i > min or s[0][-i]!=s[j][-i]:
min=0
break
else :
i+=1
sum+=1
if sum!=0:print(s[0][-sum:])
else :print()