刚看到题的时候以为是字符串匹配。吓得不行。后面发现不对。。
直接从后面往前对比,有更短匹配的更新成最短的公共尾部。
有一个不一样就返回nai.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int n;
string list[110];
int main() {
cin >> n;
cin.get();
int p = 0;
while (p < n) {
getline(cin, list[p]);
p++;
}
int finPos = -1;
bool isNai = false;
for (int i = 1; i < n; i++) {
int p1, p2;
p1 = list[0].size() - 1;
p2 = list[i].size() - 1;
while (p1 >= 0 && p2>=0 && list[0][p1] == list[i][p2]) {
p1--, p2--;
}
if (p1 == list[0].size() - 1) {
isNai = true;
break;
}
else {
if (p1 + 1 > finPos) {
finPos = p1 + 1;
}
}
}
if (isNai)
cout << "nai" << endl;
else
for (int i = finPos; i < list[0].size(); i++) {
cout << list[0][i];
}
return 0;
}