1247. 交换字符使得字符串相同
其实前两个示例已经暗示很明显了。
如果某个位置不一样,那只能是
x
y
xy
xy和
y
x
yx
yx两种情况。此时我们考虑组合情况,
x
y
xy
xy和
x
y
xy
xy、
y
x
yx
yx和
y
x
yx
yx均能通过一次交换达到要求,而
x
y
xy
xy和
y
x
yx
yx却需要两次,所以我们分别统计
x
y
xy
xy和
y
x
yx
yx的数量,然后将这些差异两两配对,优先上述的一、二两种情况,剩下的考虑第三种情况。由于
x
y
xy
xy和
y
x
yx
yx组合可以消去,所以如果最终剩下一个
x
y
xy
xy或
y
x
yx
yx,那两个字符串就不能通过交换操作变得一样。
class Solution {
public:
int minimumSwap(string s1, string s2) {
int len=s1.size();
int num_xy=0,num_yx=0;
for(int i=0;i<len;i++){
if(s1[i]!=s2[i]){
if(s1[i]=='x')num_xy++;
else num_yx++;
}
}
if((num_xy+num_yx)%2)return -1;
return num_xy/2+num_yx/2+(num_xy%2)*2;
}
};