基于Python实现01字符串中连续1的区间编码算法
实现01字符串的连续1索引区间提取
这是个典型的字符串遍历处理需求,核心是跟踪连续1的起始和结束位置,我来给你详细拆解实现思路,再附上多语言的代码示例:
核心思路
- 初始化变量:准备一个空数组存储结果,用一个变量记录当前连续1的起始索引(初始为
null/None,表示未进入1的序列)。 - 遍历字符串:逐个检查每个字符及其索引:
- 当遇到
'1'时:如果尚未进入1序列,就把当前索引设为起始位置。 - 当遇到
'0'时:如果正处于1序列中,说明连续1到此结束,将[起始索引, 当前索引-1]加入结果数组,然后重置起始索引。
- 当遇到
- 处理末尾的1序列:遍历结束后,如果起始索引不为空,说明最后一段是连续1,需要把
[起始索引, 字符串最后一位索引]补充到结果中。
Python 实现示例
def get_one_intervals(s): intervals = [] start = None for idx, char in enumerate(s): if char == '1': # 进入新的连续1序列 if start is None: start = idx else: # 连续1序列结束 if start is not None: intervals.append([start, idx - 1]) start = None # 处理字符串末尾的连续1 if start is not None: intervals.append([start, len(s) - 1]) return intervals # 测试用例 print(get_one_intervals("01101110")) # 输出: [[1, 2], [4, 6]] print(get_one_intervals("1")) # 输出: [[0, 0]] print(get_one_intervals("000")) # 输出: [] print(get_one_intervals("111001")) # 输出: [[0, 2], [5, 5]]
JavaScript 实现示例
function getOneIntervals(s) { const intervals = []; let start = null; for (let idx = 0; idx < s.length; idx++) { const char = s[idx]; if (char === '1') { if (start === null) { start = idx; } } else { if (start !== null) { intervals.push([start, idx - 1]); start = null; } } } // 收尾处理末尾的连续1 if (start !== null) { intervals.push([start, s.length - 1]); } return intervals; } // 测试用例 console.log(getOneIntervals("01101110")); // 输出: [[1,2],[4,6]] console.log(getOneIntervals("1")); // 输出: [[0,0]]
关键细节说明
- 索引是从0开始的,完全匹配你的示例要求。
- 自动处理长度为1的1序列(比如输入
"1"时输出[[0,0]])。 - 空序列或者全0的输入会返回空数组,符合逻辑。
内容的提问来源于stack exchange,提问作者WhiteNinja
相关产品推荐
相关产品推荐

