分析:
每次只能同时翻转相邻的两个硬币,那么如果第一个串经过若干次翻转可以变成第二个串,则这两个字符串中不同字符的个数一定是偶数个
另外,假设两个字符串有两个字符不同,位置依次为x1,x2,且x1<x2,易知在第一个字符串中至少要翻转x2-x1次才能使得这2个字符串相同。现在要求的是翻转次数最少的方案
假设两个字符串有四个位置不同,在字符串中的位置依次为x1,x2,x3,x4,且x1<x2<x3<x4。如果按照先后顺序两两不同字符凑一对,则需要翻转t1=(x2-x1)+(x4-x3)次,才能使得这2个字符串相同。如果两边的凑一对进行翻转,则需要翻转t2=(x4-x1)+(x3-x2)次。t2-t1=2*(x3-x2)>0,因此t2>t1,所以第一种翻转方案更好
因此,要使得翻转次数最少,一定是按先后顺序两两不同字符凑一对来进行翻转
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1, s2; cin >> s1 >> s2;
int f = 0; //f取0表示两个不同字符的前一个位置,取1为后一个
int j, k; //两两不同字符的位置
int ans = 0;
for(int i=0; i<s1.size();i++){
if(s1[i]!=s2[i] and f==0){ //两个不同字符的前一个位置
j = i; f = 1;
continue;
}
if(s1[i]!=s2[i] and f==1){ //两个不同字符的后一个位置
k = i; f = 0;
k-j;
ans += k-j;
}
}
cout << ans << endl;
return 0;
}