You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为位串中的每个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)
  • right = {2: 5, 5: 3, 6: 3}:
    • 索引2的0右侧有5个1(对应索引3、4、7、8、9的字符)
    • 索引5和6的0右侧都有3个1(对应索引7、8、9的字符)

这种方法的时间复杂度是O(n)(n是位串长度),非常高效,适合处理任意长度的位串。

内容的提问来源于stack exchange,提问作者Christian-G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:42:53