Codeforces ~ 1006D ~ Two Strings Swaps(思维)

题意

两个长度为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
*/

猜你喜欢

转载自blog.csdn.net/zscdst/article/details/81077482
今日推荐