PAT A1077Kuchiguse的第4,5测试点未过

PAT A1077Kuchiguse的第4,5测试点未过
我的解答思路和尝试过的方法

我的思路是将第一个字符串做为暂时的最长公共后缀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<
运行结果及报错内容

img

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