只有對應位置是
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;
}