由E1题可知,这个题在可以转换的地方都是连通的。所以需要遍历字符串,如果出现两个字符串上的某个字符不相同并且他不能被转换,那直接标记一下。后面直接返回就行了。否则就对字符串排序一下,看是否完全相等。
知识点:对字符串排序可以用sort(s.begin(), s.end());
对字符数组排序可以用 sort(s, s + n)
另外字符数组比较两个字符数组是否相等可以用 strcmp 相等返回 0
字符串直接比较就行了。
上代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int N = 2e5 + 10;
char s[N],re[5]="meow",t[N],ans[N];
void solve()
{
int n, k; cin >> n >> k;
cin >> s >> t;
bool flag = true;
for (int i = 0; i < n; i ++)
{
if (s[i] != t[i] && i - k < 0 && i + k >= n)// 这两个地方不相同且不能改变,直接叉出去
flag = false;
}
if (!flag)