由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)
{
cout << "NO" << "\n";
return ;
}
sort(s, s + n); sort(t, t + n)

该博客解析了Codeforces上的1800E2问题,指出当字符串中存在无法转换的字符时,可以直接判断结果。解决方案包括对字符串进行排序并比较,使用sort函数和strcmp进行字符数组的排序与比较。
最低0.47元/天 解锁文章
356

被折叠的 条评论
为什么被折叠?



