本题正解时间复杂度 O(nlgn), 而我的代码:
#include <cstdio>
#include <cstring>
using namespace std;
char a[200005], b[200005];
int n;
inline bool check(int la, int ra, int lb, int rb) {
if (la - ra + 1 != lb - rb + 1)
return 0;
if (la == ra)
return a[la] == b[lb];
int t = lb;
for (int i = la; i <= ra; i++, t++) {
if (a[i] != b[t])
break;
}
if (t == rb + 1)
return 1;
if ((ra - la + 1) & 1)
return 0;
int ma = la + ra >> 1;
int mb = lb + rb >> 1;
return (check(la, ma, lb, mb) && check(ma + 1, ra, mb + 1, rb)) ||
(check(la, ma, mb + 1, rb) && check(ma + 1, ra, lb, mb));
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
bool flag = true;
scanf("%s %s", a + 1, b + 1);
int n = strlen(a + 1);
for (int i = 1; i <= n; i++) {
if (a[i] != b[i]) {
flag = false;
break;
}
}
if (flag) {
puts("YES");
continue;
}
puts(check(1, n, 1, n) ? "YES" : "NO");
}
return 0;
}
求一个确切的时间复杂度分析,Thanks!