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

如何快速生成ABCDE构成的无3个及以上连续相同字符的10位字符串

10位ABCDE字符串生成(排除3个及以上连续相同字符)优化方案

原有实现存在的问题

  • 正则逻辑错误:你使用的正则r'(\w).*\1{3,}'实际匹配规则是「某个字符出现后,间隔任意字符再连续出现3次该字符」,完全不符合「连续3个相同字符」的校验要求,且re.match()仅从字符串开头匹配,会漏判中间、末尾出现的连续相同字符,大量无效字符串会被误判为有效。
  • 性能效率低下:通过itertools.product全量生成5^10=9765625个字符串,再逐个校验过滤,大部分算力都浪费在了无效字符串的生成和校验环节。

最优优化方案:回溯法直接生成有效字符串

直接在生成阶段就排除不符合规则的字符串,不需要生成全量候选,性能提升最明显:

def generate_valid_strings(target_length: int, char_set: str, max_consecutive: int = 2) -> list[str]:
    result = []
    def backtrack(current_str: list, last_char: str | None, consecutive_cnt: int):
        if len(current_str) == target_length:
            result.append(''.join(current_str))
            return
        for c in char_set:
            if c == last_char:
                if consecutive_cnt < max_consecutive:
                    current_str.append(c)
                    backtrack(current_str, c, consecutive_cnt + 1)
                    current_str.pop()
            else:
                current_str.append(c)
                backtrack(current_str, c, 1)
                current_str.pop()
    backtrack([], None, 0)
    return result

st = 'ABCDE'
valid_strings = generate_valid_strings(10, st)
for s in valid_strings:
    print(s)

备选优化:保留全量生成逻辑,优化校验规则

如果不想改动生成逻辑,也可以把正则校验替换为直接遍历判断,性能比正则校验高3~5倍:

import itertools as it

def is_valid(possible_str: str) -> bool:
    for i in range(len(possible_str) - 2):
        if possible_str[i] == possible_str[i+1] == possible_str[i+2]:
            return False
    return True

st = 'ABCDE'
for x in it.product(st, repeat=10):
    out = ''.join(x)
    if is_valid(out):
        print(out)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:02