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
相关产品推荐
相关产品推荐

