854. 相似度为 K 的字符串
854. 相似度为 K 的字符串
一、题目描述
对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次,能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相似度为 k 。
给你两个字母异位词 s1 和 s2 ,返回 s1 和 s2 的相似度 k 的最小值。
输入:s1 = “ab”, s2 = “ba”
输出:1
提示:
- 1 <= s1.length <= 20
- s2.length == s1.length
- s1 和 s2 只包含集合 {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’} 中的小写字母
- s2 是 s1 的一个字母异位词
二、解题思路
查找交换的所有可能情况,可以采用回溯法。
- 每次交换,至少把 1 个字符换到正确的位置
这样子做的话,交换次数最多 n - 1 次。
因为 n - 1 次交换之后,前 n - 1 个字符都已经对上了,那最后一个肯定也对上了。
- 最优的交换是,交换后的 2 个字符的位置都是正确的
可利用最优交换进行快速剪枝。另外,
- 如果当前交换次数,比之前最小的交换次数还大了,此时可以直接剪枝
三、复杂度分析
不分析时空复杂度。
四、参考代码
1 | int ans = Integer.MAX_VALUE; |
854. 相似度为 K 的字符串
http://example.com/practice/leetcode/string/854.KSimilarity/