-
Notifications
You must be signed in to change notification settings - Fork 0
/
二进制01转换最小转换次数.py
43 lines (36 loc) · 1.35 KB
/
二进制01转换最小转换次数.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 编写一个程序,找出将二进制字符串转换为01交替二进制字符串所需的最少转换次数。
# 转换定义0变为1或1变为0。
#
# 定义函数min_swaps_binary(),该函数接受一个二进制字符串作为参数。
# 在函数内计算将给定的二进制字符串变为为0和1交替出现的字符串所需的最少转换次数。
# 比如
#
# 100只需要转换1次就可以变成101,所以返回1,即第3位的0变为1
# 10101不需要转换,所以返回0;01也不需要转换,所以返回0
# 0110 需要转换2次变为0101,所以返回2,第三位的1变为0,第四位的0变为1
#
# 示例输入
# 1100101
# 示例输出
# 2
def min_swaps_binary(binary):
# 将输入的整数转为为字符串
binary = str(binary)
# 两种可能的交替字符串,一种以0开始,一种以1开始
alt1, alt2 = '', ''
for i in range(len(binary)):
alt1 += '0' if i % 2 == 0 else '1'
alt2 += '1' if i % 2 == 0 else '0'
# 计算与这两种可能字符串的差异
diff1, diff2 = 0, 0
for i in range(len(binary)):
if binary[i] != alt1[i]:
diff1 += 1
if binary[i] != alt2[i]:
diff2 += 1
# 返回最小的差异值
return min(diff1, diff2)
# 输入二进制字符串
binary = input()
# 输出最少转换次数
print(min_swaps_binary(binary))