1、编程试题:
编写一个程序,找出将二进制字符串转换为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
解释:
将二进制字符串1100101转换为交替的二进制字符串所需的最少转换次数为2。
转换是当前位置的0变为1或者1变为0,最终的结果是0和1交替出现。
可以0开头,也可以1开头,所以需要计算两种情况下的最少转换次数,取最小值。
2、代码实现:
可编辑代码如下:
#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 , Inc. All Rights Reserved
#
# @Time : 2024/3/2 19:39
# @Author : fangel
# @FileName : 132. 二进制01转换最小转换次数.py
# @Software : PyCharm
def min_swaps_binary(binary):
count1=0
#count2计数适用于将第一个字符从0改为1的场景
count2=1
count3=0
# count4计数适用于将第一个字符从1改为0的场景
count4=1
# 第一个字符以0开头,需要考虑两种情况,是0或者改成1
if binary[0] == "0":
# 第一个字符是0的情况
for i in range(1,len(binary)):
if(i % 2 == 1) and binary[i] != "1":
count1 += 1
elif (i % 2 == 0) and binary[i] != "0":
count1 += 1
# 第一个字符改为1的情况
for i in range(1,len(binary)):
if(i % 2 == 1) and binary[i] != "0":
count2 += 1
elif (i % 2 == 0) and binary[i] != "1":
count2 += 1
return min(count1,count2)
#第一个字符以1开头,需要考虑两种情况,是1或者改成0
else:
#第一个字符是1的情况
for i in range(1, len(binary)):
if (i % 2 == 1) and binary[i] != "0":
count3 += 1
elif (i % 2 == 0) and binary[i] != "1":
count3 += 1
#将第一个字符改为0的情况
for i in range(1, len(binary)):
if (i % 2 == 1) and binary[i] != "1":
count4 += 1
elif (i % 2 == 0) and binary[i] != "0":
count4 += 1
return min(count3, count4)
# 输入二进制字符串
binary = input()
# 输出最少转换次数
print(min_swaps_binary(binary))
3、代码分析:
本例需要考虑如下两种情况:第一个字符以0开头,需要考虑两种情况,是0或者改成1;第一个字符以1开头,需要考虑两种情况,是1或者改成0
4、运行结果:
输入:
10101
输出:
0
输入:
100010
输出:
1
本文暂时没有评论,来添加一个吧(●'◡'●)