class Solution {
public:
int minimumSwap(string s1, string s2) {
int xy=0,yx=0;
for(int i=0;i<s1.size();i++)
{
if(s1[i]=='x'&&s2[i]=='y')
xy++;
if(s1[i]=='y'&&s2[i]=='x')
yx++;
}
if((xy+yx)%2)//不相同的情况为奇数
return -1;
return xy/2+yx/2+xy%2+yx%2;
//两种交换方式:
/*
xx
yy 这里只需一次交换就可减少两次xy, yx同理
xy
yx 这里需要两次交换分别减少一次xy 一次yx
return xy/2+yx/2+xy%2+yx%2;
对于xy为偶数部分 除2为交换次数,剩下的一次,也必然对应yx一次,此时需要两次交换刚好用取模运算
而出现最后减的只剩一个xy或yx则说明(xy+yx)是奇数,这种情况是无法获得相等的字符串的,x,y字符个数都不相同
*/
}
};
1247. 交换字符使得字符串相同
最新推荐文章于 2024-07-25 11:15:54 发布