题目
字符串s1,s2长度相等,内容只包含字符x,y,不包含其他字符,每次互相交换一个字符,求使得两个字符串相等的最小交换次数,如果无法使两个字符串相等,则返回 -1
例:
输入:s1="xy" s2="yx" 输出:2
思路
两个字符串长度相等,如果对位有差异要么是xy,要么是yx,发生交换也只需要交换这些有差异的位置即可。
发生交换,如果有2处不同都为xy或者yx,则互相交换一次则可相等。
交换前 | 交换方式 | 交换后 |
---|---|---|
x x | 1 3 交换 | y x |
y y | y x |
两两抵消之后可能剩下的差异情况为这三种情况:
xy
或者yx
或者xy、yx
。
明显前面两种无法继续交换达到相等,而第三种则需要交换2
次。
代码
public int minSwap(String s1, String s2) {
// 长度不相等则肯定不可能相等
if (Objects.isNull(s1) || Objects.