目录
通过交换字符使两个字符串相同 —— 贪心算法详解
✨题目描述
我们有两个长度相同的字符串 s1
和 s2
,它们只包含两个字符:'x'
和 'y'
。你可以进行若干次跨字符串字符交换,每次只能选择 s1
和 s2
中的某个字符进行交换。
交换操作的规则如下:
- 每次只能交换两个字符串中不同位置的字符:即
s1[i]
和s2[j]
; - 不能在同一个字符串中交换字符;
- 目标是使两个字符串完全相同;
- 返回最小的交换次数;
- 如果无法完成目标,返回
-1
。
🧠解题思路分析
题目要求通过跨字符串的交换操作使两个字符串相等。这类问题通常涉及 贪心 + 分类计数 的策略。
首先,我们注意到:
- 只有当
s1[i] ≠ s2[i]
时,我们才有必要进行交换; - 我们将这类不匹配分成两种情况:
-
s1[i] = 'x'
且s2[i] = 'y'
→ 记为xy
类型;s1[i] = 'y'
且s2[i] = 'x'
→ 记为yx
类型;
举个例子:
s1 = x x y y
s2 = y y x x
=> 不匹配位置:
s1[0] = x