只有对应位置是
x
y
或者
y
x
的时候需要考虑交换
记第一种类型的个数为t1, 第二种为t2
xxxx
yyyy
我们可以交换两次得到
yyxx
yyxx
第二种类型的同理,
如果两种类型的个数都是奇数的话会多出来一个
xy
yx
需要再交换两次,
如果一个奇数一个偶数,那么无解。
public int minimumSwap(String s1, String s2) {
if (s1.length() != s2.length()) return -1;
int len = s2.length();
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
int t1 = 0, t2 = 0;
for (int i = 0; i < len; i++) {
if (c1[i] == c2[i]) continue;
if (c1[i] == 'x' && c2[i] == 'y') t1++;
if (c1[i] == 'y' && c2[i] == 'x') t1++;
}
int ans = 0;
ans += t1 / 2;
ans += t2 / 2;
t1 %= 2;
t2 %= 2;
if (t1 + t2 == 1) return -1;
ans += t1 + t2;
return ans;
}