保证每个字符串的长度不超过1010
O(n²)的复杂度是可以接受的
从长到短枚举所有可能的长度,然后判断s的最后len个字符是否对应的和t的最前len个字符相同,找到的第一个满足条件的长度即为最大长度,然后输出s的最后len个字符

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1015;
char s[maxn], t[maxn];
int main() {
    while(~scanf("%s%s", s, t)) {
        int ls = strlen(s);
        int lt = strlen(t);
        int len = 0;
        for(len = min(ls, lt); len >= 0; --len) {
            bool flag = true;
            for(int i = 0; i < len; ++i)
                if(s[ls-len + i] != t[i]) {
                    flag = false;
                    break;
                }
            if(flag) {
                break;
            }
        }
        printf(len == 0 ? "\"NULL!\"\n" : "%s\n", &s[ls-len]);
    }
    return 0;
}