## 1247. Minimum Swaps to Make Strings Equal

You are given two strings `s1` and `s2` of equal length consisting of letters `"x"` and `"y"` only. Your task is to make these two strings equal to each other. You can swap any two characters that belong to different strings, which means: swap `s1[i]` and `s2[j]`.

Return the minimum number of swaps required to make `s1` and `s2` equal, or return `-1` if it is impossible to do so.

Example 1:

```Input: s1 = "xx", s2 = "yy"
Output: 1
Explanation:
Swap s1 and s2, s1 = "yx", s2 = "yx".```

Example 2:

```Input: s1 = "xy", s2 = "yx"
Output: 2
Explanation:
Swap s1 and s2, s1 = "yy", s2 = "xx".
Swap s1 and s2, s1 = "xy", s2 = "xy".
Note that you can't swap s1 and s1 to make s1 equal to "yx", cause we can only swap chars in different strings.```

Example 3:

```Input: s1 = "xx", s2 = "xy"
Output: -1
```

Example 4:

```Input: s1 = "xxyyxyxyxx", s2 = "xyyxyxxxyx"
Output: 4
```

Constraints:

• `1 <= s1.length, s2.length <= 1000`
• `s1, s2` only contain `'x'` or `'y'`.

## Rust Solution

``````struct Solution;

impl Solution {
fn minimum_swap(s1: String, s2: String) -> i32 {
let n = s1.len();
let s1: Vec<char> = s1.chars().collect();
let s2: Vec<char> = s2.chars().collect();
let mut x = 0;
let mut y = 0;
for i in 0..n {
if s1[i] == 'x' && s2[i] == 'y' {
x += 1;
}
if s1[i] == 'y' && s2[i] == 'x' {
y += 1;
}
}
if (x + y) % 2 != 0 {
return -1;
}
x / 2 + y / 2 + x % 2 * 2
}
}

#[test]
fn test() {
let s1 = "xx".to_string();
let s2 = "yy".to_string();
let res = 1;
assert_eq!(Solution::minimum_swap(s1, s2), res);
let s1 = "xy".to_string();
let s2 = "yx".to_string();
let res = 2;
assert_eq!(Solution::minimum_swap(s1, s2), res);
let s1 = "xx".to_string();
let s2 = "xy".to_string();
let res = -1;
assert_eq!(Solution::minimum_swap(s1, s2), res);
let s1 = "xxyyxyxyxx".to_string();
let s2 = "xyyxyxxxyx".to_string();
let res = 4;
assert_eq!(Solution::minimum_swap(s1, s2), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.