我的思路是将第一个字符串做为暂时的最长公共后缀suffix;每次读入下一行字符串时,找到暂时最长公共后缀suffix和该字符串的最长公共后缀,作为新的suffix;最后依据suffix的长度决定输出“nai”或直接输出suffix。
#include
using namespace std;
// 寻找两个字符串的公共最长后缀
string Suffix(string A, string B){
string C = "";
int i = 1, lenA = A.size(), lenB = B.size();
while(1){
char a = A[lenA - i], b = B[lenB - i];
if(a == b){
C = a + C;
i++;
}
if (a != b)
return C;
if (lenA - i == 0)
return A;
if (lenB - i == 0)
return B;
}
}
int main(){
int N;
cin >> N;
cin.ignore();
string suffix;
getline(cin, suffix); // 初始公共最长后缀为第一个字符串
for(int i = 1; i < N; i++){ // 边读入边取公共最长后缀
string temp;
getline(cin, temp);
suffix = Suffix(suffix, temp);
}
if(suffix.size() == 0) cout<<"nai";
else cout<
运行结果及报错内容

16-19行出现问题, == 0 时你不知道这个位置是否相等就反回了。 比如 abc 和 bbbc 3-3 == 0 返回abc 这就错了