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

如何将字符串拆分为重复的缩写字符?以"abcabcab"拆分需求为例

如何将字符串拆分为重复的缩写字符

嘿,这个需求很明确嘛!要把abcabcab拆成["abc", "abc", "a", "b"]这类形式,核心就是先找出字符串里重复出现的子串,优先用最长的重复子串来拆分,剩下没法组成重复子串的部分就拆成单个字符。下面给你一步步讲清楚怎么实现:

思路拆解

  • 优先找最长重复子串:从字符串长度的一半开始往下试(毕竟子串至少得重复两次才有意义),这样能先拿到最长的重复单元,符合“缩写”的需求。
  • 拆分连续重复段:一旦找到能连续重复的子串,就把所有连续出现的该子串都拆出来。
  • 处理剩余字符:剩下的没法凑成重复子串的部分,直接拆成单个字符就行。

Python代码实现

直接上可运行的代码,拿你的示例abcabcab测试刚好适用:

def split_repeated_substrings(input_str):
    str_len = len(input_str)
    # 从最长的可能子串长度开始遍历,直到长度为1
    for sub_len in range(str_len // 2, 0, -1):
        target_sub = input_str[:sub_len]
        repeat_times = 0
        # 检查子串是否能连续匹配开头的片段
        while input_str[repeat_times * sub_len : (repeat_times + 1) * sub_len] == target_sub:
            repeat_times += 1
        # 如果重复次数大于1,说明找到有效重复子串
        if repeat_times > 1:
            # 先把重复的子串加入结果
            result = [target_sub] * repeat_times
            # 处理剩下的字符,拆成单个字符加入结果
            remaining_chars = input_str[repeat_times * sub_len :]
            result.extend(list(remaining_chars))
            return result
    # 如果没找到任何重复子串,直接拆成单个字符返回
    return list(input_str)

# 测试你的示例字符串
test_str = "abcabcab"
print(split_repeated_substrings(test_str))  # 输出: ['abc', 'abc', 'a', 'b']

代码说明

  • 遍历逻辑:从最长可能的子串长度开始试,确保我们优先用最长的重复子串来拆分,避免拆成更短的重复单元(比如不会把abcabc拆成a、b、c反复出现)。
  • 连续重复检查:通过循环统计子串连续重复的次数,确保我们拆分的是连续的重复段。
  • 边界处理:如果字符串里完全没有重复子串(比如abcd),就直接拆成单个字符返回,不会报错。

要是你需要的不是只处理开头的连续重复,而是要找出字符串中所有位置的重复子串来拆分,那逻辑会稍微复杂一点,但从你的示例来看,上面的实现应该完全能满足需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:56