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

Python实现最长相同字符子串提取:需输出多个最长子串求助

解决提取所有最长连续相同字符子串的问题

你的代码问题在于只跟踪了单个最长子串的位置,当遇到长度相同的其他最长子串时,不会记录下来,所以只能返回一个结果。要输出所有最长子串,得先把所有连续相同字符的子串都找出来,再筛选出长度最大的那些。

方案一:更清晰的遍历收集法

直接遍历字符串,先收集所有连续相同字符的子串,再筛选最长的:

def find_longest_substrings(s):
    if not s:
        return []
    
    substrings = []
    current_char = s[0]
    current_start = 0
    
    for i in range(1, len(s)):
        if s[i] != current_char:
            # 记录当前连续子串
            substrings.append(s[current_start:i])
            current_char = s[i]
            current_start = i
    # 添加最后一个子串
    substrings.append(s[current_start:])
    
    # 计算最长子串长度
    max_length = max(len(sub) for sub in substrings)
    # 筛选所有最长子串
    longest_subs = [sub for sub in substrings if len(sub) == max_length]
    
    return longest_subs

# 测试示例
print(find_longest_substrings('10111000'))  # 输出 ['111', '000']

方案二:基于原代码修改

如果你想保留原代码的结构,只需调整为用列表维护所有最长子串:

def sequences(nums):
    if not nums:
        return []
    
    pos1 = 0
    pos2 = 1
    # 初始化最长子串列表,先放入第一个字符
    longest_subs = [nums[0]]
    current_max_len = 1
    
    while pos2 < len(nums):
        if nums[pos2] != nums[pos2-1]:
            current_sub = nums[pos1:pos2]
            current_len = len(current_sub)
            if current_len > current_max_len:
                # 找到更长的子串,重置列表
                longest_subs = [current_sub]
                current_max_len = current_len
            elif current_len == current_max_len:
                # 长度相同,加入列表
                longest_subs.append(current_sub)
            pos1 = pos2
        pos2 += 1
    
    # 处理最后一段连续子串
    current_sub = nums[pos1:pos2]
    current_len = len(current_sub)
    if current_len > current_max_len:
        longest_subs = [current_sub]
    elif current_len == current_max_len:
        longest_subs.append(current_sub)
    
    return longest_subs

# 测试示例
print(sequences('10111000'))  # 输出 ['111', '000']

核心逻辑说明

  • 两种方案都先识别所有连续相同字符的子串
  • 记录最长子串的长度,再筛选出所有长度等于该值的子串
  • 返回结果改为列表类型,才能容纳多个最长子串

内容的提问来源于stack exchange,提问作者GGANGG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:40:20