【B.寻寻觅觅寻不到】暴力,对于两个字符串a、b,如果a[pos]!=b[pos],那么截取的k一定在pos处或者左边,枚举k就行了。特判有点麻烦。

#include <bits/stdc++.h>
#define sz(x) (int)(x).size()
using namespace std;

const int N = 3e5 + 10;
string s, t;
int n1, n2, k;

int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> s >> t >> k;
        n1 = sz(s), n2 = sz(t);
        if (n1 != n2) {
            cout << "NO\n";
            continue;
        }
        if (k > n1) {
            cout << "NO\n";
            continue;
        }
        if (s == t) {
            cout << "YES\n";
            continue;
        }
        int pos = 0;
        for (; pos < n1; pos++) {
            if (s[pos] != t[pos]) break;
        }

        // 遍历所有的情况
        bool res = false;
        for (int i = 0; i <= k; i++) {
            int post = pos - i;
            if (post < 0) break;
            if (post + k > n1) {
                continue;
            }

            string tmp1 = s.substr(post, k);
            string tmp = s.substr(0, post) + s.substr(post + k) + tmp1;
            if (tmp == t) res = true;
        }

        if (res)
            cout << "YES\n";
        else
            cout << "NO\n";
    }

    return 0;
}