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

Python如何检测字符串并返回指定长度的首个连续相同字符子串

实现方案

核心思路

  • 遍历字符串,统计单个字符的连续出现次数,一旦连续次数达到指定的子串长度,直接返回该字符组成的对应长度子串即可,保证返回的是第一个符合要求的结果。
  • 提前做边界校验,避免非法输入导致的报错。

基础实现(易理解)

该写法逻辑直观,适合快速实现,不需要复杂的计数逻辑:

def find_first_repeated_substring(s: str, target_len: int) -> str | None:
    str_length = len(s)
    # 目标长度大于字符串总长度,直接返回空
    if target_len > str_length:
        return None
    # 目标长度为1时直接返回第一个字符
    if target_len == 1:
        return s[0]
    # 遍历所有可能的子串起始位置
    for start_idx in range(str_length - target_len + 1):
        # 校验当前起始位置开始的子串是否所有字符相同
        if all(char == s[start_idx] for char in s[start_idx:start_idx+target_len]):
            return s[start_idx:start_idx+target_len]
    # 无符合要求的子串
    return None

优化实现(性能更高)

仅需单次遍历字符串,时间复杂度为O(n),适合长字符串、大目标长度的使用场景:

def find_first_repeated_substring_optimized(s: str, target_len: int) -> str | None:
    str_length = len(s)
    if target_len > str_length:
        return None
    if target_len == 1:
        return s[0]
    
    current_char = s[0]
    consecutive_count = 1
    for idx in range(1, str_length):
        if s[idx] == current_char:
            consecutive_count += 1
            # 连续次数达到目标值,直接返回结果
            if consecutive_count == target_len:
                return current_char * target_len
        else:
            # 字符变化,重置计数和当前字符
            current_char = s[idx]
            consecutive_count = 1
    return None

测试验证

test_str = 'abaadddefggg'
# 目标长度3
print(find_first_repeated_substring(test_str, 3)) # 输出:ddd
print(find_first_repeated_substring_optimized(test_str, 3)) # 输出:ddd
# 目标长度2
print(find_first_repeated_substring(test_str, 2)) # 输出:aa
print(find_first_repeated_substring_optimized(test_str, 2)) # 输出:aa

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:03