📅  最后修改于: 2023-12-03 15:36:42.410000             🧑  作者: Mango
对于给定的两个长度相等的二进制字符串,如果它们的某个位置不同,我们可以将其中一个位置上的数字翻转,从而使它们相等。问最少需要单次翻转几个相邻位置才能使两个二进制字符串变成相等的。
示例:
输入:a = "1100", b = "1001"
输出:2
解释:需要翻转 a 中的第一位和第二位,才能与 b 相等。
这道题可以使用贪心算法来得到最小翻转次数。具体来说,我们可以从前向后扫描这两个字符串,如果当前位置的数字不同,那么我们就将其翻转。对于位置 i,翻转的必要性如下:
因此,我们可以从前向后遍历两个字符串,每次判断是否需要翻转。最后统计翻转次数即可。具体实现可参考下面的代码。
def minFlips(a: str, b: str) -> int:
count = 0
for i in range(len(a)):
if a[i] != b[i]:
if i == len(a) - 1 or a[i+1] == b[i+1]:
count += 1
else:
count += 2
return count