求助!时间复杂度分析
  • 板块灌水区
  • 楼主W123789
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/11/13 11:52
  • 上次更新2023/10/27 03:08:02
查看原帖
求助!时间复杂度分析
430283
W123789楼主2022/11/13 11:52

link

本题正解时间复杂度 O(nlgn)O(n\lg{n}), 而我的代码:

#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!

2022/11/13 11:52
加载中...