📌  相关文章
📜  给定二进制字符串中最左侧设置位的位置,其中所有 1 都出现在末尾(1)

📅  最后修改于: 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() 函数用于测试代码,如果测试结果不符合期望的输出值,则会抛出异常,并打印出错误信息。