Python程序:查找使给定字符串变成其变位词所需的最小交换次数
假设我们有两个字符串 S 和 T,它们互为变位词。我们需要找到使 S 变成与 T 相同所需的最小交换次数。
因此,如果输入类似于 S = "kolkata" T = "katloka",则输出将为 3,因为可以通过以下顺序进行交换:[katloka(给定),kotlaka,koltaka,kolkata]。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数 util()。它将接收 S、T、i 作为参数。
- 如果 i >= S 的大小,则
- 返回 0
- 如果 S[i] 与 T[i] 相同,则
- 返回 util(S, T, i + 1)
- x := T[i]
- ret := 99999
- 对于 j 从 i + 1 到 T 的大小,执行以下操作
- 如果 x 与 S[j] 相同,则
- 交换 S[i] 和 S[j]
- ret := ret 和 (1 + util(S, T, i + 1)) 的最小值
- 交换 S[i] 和 S[j]
- 如果 x 与 S[j] 相同,则
- 返回 ret
- 从主方法执行以下操作
- 返回 util(S, T, 0)
让我们看看以下实现以获得更好的理解:
示例
class Solution: def util(self, S, T, i) : S = list(S) T = list(T) if i >= len(S): return 0 if S[i] == T[i]: return self.util(S, T, i + 1) x = T[i] ret = 99999; for j in range(i + 1, len(T)): if x == S[j]: S[i], S[j] = S[j], S[i] ret = min(ret, 1 + self.util(S, T, i + 1)) S[i], S[j] = S[j], S[i] return ret def solve(self, S, T): return self.util(S, T, 0) ob = Solution() S = "kolkata" T = "katloka" print(ob.solve(S, T))
输入
"kolkata", "katloka"
输出
3
广告