错误点

《算法笔记》中给出的思路是对的,但是实现是错的!

具体原因与反转有关,也和PTA不知道是什么奇怪的检测用例有关。

尝试多次修改无果,暂时放这了。


/* A1077 == 字符数组倒序查找相同后缀/先反转,然后正序查找相同前缀 */

//有问题,反转本身就很有问题,会有回车
#include <cstdio>
#include <cstring>
//int minLen = 256;
void rever(char n[])
{
    int len = strlen(n) - 1;
    for (int i = 0; i < len / 2; i++) {
        char temp = n[i];
        n[i] = n[len - 1 - i];
        n[len - 1 - i] = temp;
    }
}

int main()
{
    int N;
    char lan[100][256];
    scanf("%d", &N);
    getchar();
    for (int i = 0; i < N; i++) {
        //scanf("%s", &lan[i]);
        fgets(lan[i], sizeof(lan[i]), stdin);
        //getchar();
        //int len = strlen(lan[i]);
        //if (minLen > len) minLen = len;
        rever(lan[i]);
    }

    int index = 0;
    int len = strlen(lan[0]);
    for (int i = 0; i < len; i++) {
        //if (lan[0][i] == '\n') continue;
        char c = lan[0][i];
        bool same = true;
        for (int j = 1; j < N; j++) {
            if (c != lan[j][i]) {
                same = false;
                break;
            }
        }
        if (same) index++;
        else break;
    }
    /*
    for (int i = 0; i < N; i++) {
        puts(lan[i]);
    }
    */
    if (index) {
        for (int i = index - 1; i >= 0; i--) {
            printf("%c", lan[0][i]);
        }
    } else {
        printf("nai");
    }
    return 0;
}