题意是给了两个字符串a和b,然后可以对这两个字符串有三种操作来使这两个字符串相等,一是交换a[i]和b[i],二是交换a[i]和a[n-i+1],三是交换b[i]和b[n-i+1],这三个操作都是不计步数的,然后问最少还需要多少步可以让a串等于b串。
分析:我们可以想到我们只要关心a[i],a[n-i+1],b[i],b[n-i+1],这四个数即可,只要他们是构成两队相等的对字符,我们就可以通过交换变成是相等的字符串,所以我们遍历一遍
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int len; string a,b; int main() { cin>>len>>a>>b; int ans = 0; for(int i=0;i<len/2;i++){ int l = i, r = len - 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[r] == b[r] || a[l] == b[r] || a[r] == b[l] || b[l] == b[r]) ans++; else ans += 2; } if(len % 2 == 1 && a[len/2] != b[len/2])ans++; cout<<ans<<endl; return 0; }
Codeforces Round#498(Div.3)D. Two Strings Swaps
原文:https://www.cnblogs.com/shuaihui520/p/9393587.html