解法一

i 为字符串下标,将同一位置上的 s1[i]s2[i] 视为一组字符串。

  • 当你有两组 xy 或者 yx 的时候,只需要交换一次,那么这两个两位置上的字符就满足相等了。
  • 当你有 xyyx 各一组时,需要交换两次来让这两个位置上的字符相等。
  • 当你只剩下一组 xy 或者 yx 的时候,无法通过交换满足题意。

先统计出相同位置不同字符的总数,根据奇偶性判断是否能够通过交换满足题意。
要求最小次数,采用贪心思想。先两两配对,尽可能使用第一种情况的组合方式,然后如果有单个剩下的 xyyx ,再采用第二种情况的组合方式。

  1. class Solution {
  2. public int minimumSwap(String s1, String s2) {
  3. int count_xy = 0;
  4. int count_yx = 0;
  5. for (int i = 0; i < s1.length(); ++i) {
  6. if ((s1.charAt(i) == 'x') && (s2.charAt(i) == 'y')) {
  7. ++count_xy;
  8. } else if ((s1.charAt(i) == 'y') && (s2.charAt(i) == 'x')) {
  9. ++count_yx;
  10. }
  11. }
  12. if ((count_xy + count_yx) % 2 != 0) {
  13. return -1;
  14. }
  15. int ans = count_xy / 2 + count_yx / 2;
  16. count_xy %= 2;
  17. count_yx %= 2;
  18. if ((count_xy != 0) && (count_yx != 0)) {
  19. ans += 2;
  20. }
  21. return ans;
  22. }
  23. }