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.

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

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

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

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

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

Solution:

class Solution { public int minimumSwap(String s1, String s2) { // Cases to do 1 swap: // "xx" "yy" // "yy" "xx" // // Cases to do 2 swaps: // "xy" "yx" // "yx" "xy" int xy = 0, yx = 0; for (int i = 0; i < s1.length(); i ++) { char a = s1.charAt(i); char b = s2.charAt(i); if (a == b) continue; if (a == 'x') xy ++; else yx ++; } if ((xy + yx) % 2 == 1) return -1; return xy / 2 + yx / 2 + (xy % 2 + yx % 2) / 2 * 2; } }