保证每个字符串的长度不超过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; }