题意
两个长度为n的字符串a,b。先将a改变一些字符,然后通过任意次交换操作使a==b,问a最少需要改变几个字符?
字符串下标为从1到n,①swap(a[i],b[i])②swap(a[i],a[n-i+1])③swap(b[i],b[n-i+1])
思路
其实情况并不多,仔细考虑一下就好了。
a[l],a[r]表示a[i]和a[n-i+1],b[l]和b[r]同理。
每次看四个字符a[l],b[l],a[r],b[r],如果两两相等那么就不需要改变字符,如果有一对相等(且不是a[l]==a[r])那么我们需要改变一个字符,否则需要改变两个。
注意一下奇数情况。
#include <bits/stdc++.h>
using namespace std;
int n;
string a, b;
int main()
{
cin >> n >> a >> b;
int ans = 0;
for (int i = 0; i < n/2; i++)
{
int l = i, r = n-i-1;
if (a[l] == b[l] && a[r] == b[r] || a[l] == b[r] && a[r] == b[l]
|| a[l] == a[r] && b[l] == b[r]) continue;
else if (a[l] == b[l] || a[l] == b[r] || a[r] == b[l]
|| a[r] == b[r] || b[l] == b[r]) ans++;
else ans += 2;
}
if (n%2 && a[n/2] != b[n/2]) ans++;
printf("%d", ans);
return 0;
}
/*
7
abacaba
bacabaa
*/