解法一
i
为字符串下标,将同一位置上的 s1[i]
和 s2[i]
视为一组字符串。
- 当你有两组
xy
或者yx
的时候,只需要交换一次,那么这两个两位置上的字符就满足相等了。 - 当你有
xy
和yx
各一组时,需要交换两次来让这两个位置上的字符相等。 - 当你只剩下一组
xy
或者yx
的时候,无法通过交换满足题意。
先统计出相同位置不同字符的总数,根据奇偶性判断是否能够通过交换满足题意。
要求最小次数,采用贪心思想。先两两配对,尽可能使用第一种情况的组合方式,然后如果有单个剩下的 xy
和 yx
,再采用第二种情况的组合方式。
class Solution {
public int minimumSwap(String s1, String s2) {
int count_xy = 0;
int count_yx = 0;
for (int i = 0; i < s1.length(); ++i) {
if ((s1.charAt(i) == 'x') && (s2.charAt(i) == 'y')) {
++count_xy;
} else if ((s1.charAt(i) == 'y') && (s2.charAt(i) == 'x')) {
++count_yx;
}
}
if ((count_xy + count_yx) % 2 != 0) {
return -1;
}
int ans = count_xy / 2 + count_yx / 2;
count_xy %= 2;
count_yx %= 2;
if ((count_xy != 0) && (count_yx != 0)) {
ans += 2;
}
return ans;
}
}