📅  最后修改于: 2023-12-03 14:56:53.271000             🧑  作者: Mango
给定一个二进制字符串,找到其中最左侧的设置位(即值为 1 的位),并且该设置位后面的所有位都是 1。
例如:
输入:1100110
输出:3
解释:最左侧设置位的位置是 3,从该位置开始的后面所有位都是 1,所以输出为 3。
根据题目描述,可知所求为最左侧设置位的位置。因此,我们可以从字符串的最左侧开始遍历,找到第一个 1 的位置。
接着,我们需要判断从该位置开始的后面所有位是否都是 1。如果是,则该位置就是所求的最左侧设置位的位置;否则,继续往右遍历,再次寻找符合条件的位置。
我们可以用 Python 编写一个函数来实现上述思路。实现过程中,我们需要注意字符串的下标从 0 开始计数。
def find_left_set_bit_position(binary_string):
for i in range(len(binary_string)):
if binary_string[i] == '1':
if '0' not in binary_string[i+1:]:
return i+1
return -1
为了验证函数的正确性,我们可以使用以下测试样例:
binary_string_1 = '1100110'
expected_output_1 = 3
assert(find_left_set_bit_position(binary_string_1) == expected_output_1)
binary_string_2 = '111111'
expected_output_2 = 1
assert(find_left_set_bit_position(binary_string_2) == expected_output_2)
binary_string_3 = '0'
expected_output_3 = -1
assert(find_left_set_bit_position(binary_string_3) == expected_output_3)
其中,assert()
函数用于测试代码,如果测试结果不符合期望的输出值,则会抛出异常,并打印出错误信息。