如何为位串中的每个0生成左侧与右侧1的数量字典?
嘿,我来帮你搞定这个位串统计的需求!针对你给出的位串 1101100111,我们可以通过两次高效的线性遍历(正向+反向)来生成目标字典,比逐个索引重复统计要节省不少性能,尤其是对位串较长的场景。下面是完整的实现方案:
实现思路
- 首先,我们只需要关注位串中所有
0的索引位置,这些就是两个字典的键。 - left字典:正向遍历位串,实时累计遇到的
1的数量,每碰到一个0,就把当前累计的1数存入该索引对应的字典值。 - right字典:反向遍历位串,同样实时累计
1的数量,碰到0时就把当前累计值存入对应索引。
完整代码
# 你的目标位串 bit_string = "1101100111" left = {} right = {} # 构建left字典:统计每个0左侧的1数量 current_left_ones = 0 for idx, char in enumerate(bit_string): if char == '0': left[idx] = current_left_ones else: current_left_ones += 1 # 构建right字典:统计每个0右侧的1数量 current_right_ones = 0 # 从最后一个索引倒序遍历 for idx in reversed(range(len(bit_string))): char = bit_string[idx] if char == '0': right[idx] = current_right_ones else: current_right_ones += 1 # 输出结果验证 print("left字典:", left) print("right字典:", right)
运行结果说明
针对位串1101100111(索引从0开始计数),运行代码后会得到:
left = {2: 2, 5: 4, 6: 4}:- 索引2的
0左侧有2个1(对应索引0、1的字符) - 索引5的
0左侧有4个1(对应索引0、1、3、4的字符) - 索引6的
0左侧同样是4个1(它紧邻索引5的0,中间没有新增的1)
- 索引2的
right = {2: 5, 5: 3, 6: 3}:- 索引2的
0右侧有5个1(对应索引3、4、7、8、9的字符) - 索引5和6的
0右侧都有3个1(对应索引7、8、9的字符)
- 索引2的
这种方法的时间复杂度是O(n)(n是位串长度),非常高效,适合处理任意长度的位串。
内容的提问来源于stack exchange,提问作者Christian-G
相关产品推荐
相关产品推荐

