这道题要考虑每个位置和他相对位置上面有几个不相同的字符,如果四个都不同,就修改两个。如果三个不同,而a[i]==a[n-i+1],则修改两个,其余情况修改一个,如果两个不同,则不需要修改
主要看a,b串相对位置上的值不同的有几个,这样会好讨论很多。
#include<bits/stdc++.h> using namespace std; int main() { int n; scanf("%d",&n); string a,b; cin>>a; cin>>b; a='0'+a; b='0'+b; int res=0; for(int i=1;i<=n/2;i++) { //printf("%d ",i); if(a[i]==b[i]) { if(a[n-i+1]!=b[n-i+1]) res++; } else { if(a[i]==a[n-i+1]&&b[i]==b[n-i+1]||a[i]==b[n-i+1]&&b[i]==a[n-i+1]) { continue; } else if(a[i]==b[n-i+1]||b[i]==a[n-i+1]||a[n-i+1]==b[n-i+1]||b[i]==b[n-i+1]) res++; else res+=2; } //printf("**%d ",res); } if(n%2==1) { if(a[n/2+1]!=b[n/2+1]) res++; } printf("%d ",res); }