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

实现Russian Nesting Quine:模拟Matryoshka doll嵌套逻辑的编程任务

实现俄罗斯套娃字符串的逐层展开

这是个挺有意思的问题,核心得先摸清楚这种嵌套字符串的构成规律,才能逆向写出展开的逻辑。咱们先从你给的例子入手:

  • N=1(基础版):abcd → 拆成前半段ab(记为A)和后半段cd(记为B)
  • N=2:ababcdcd → 其实是A*2 + B*2(也就是abab + cdcd)
  • N=3:abababcdcdcd → 对应A*3 + B*3(ababab + cdcdcd)

规律一下子就清晰了:N次嵌套的字符串,是基础段前半部分重复N次,加上基础段后半部分重复N次。那我们的目标就是,拿到这个N次的字符串,输出N-1次的版本——也就是A*(N-1) + B*(N-1),当N=1时,结果就是空字符串(因为任何字符串重复0次都是空)。

实现步骤

  1. 拆分输入字符串:合法的嵌套字符串长度一定是偶数(因为AN和BN长度相等),所以先把字符串分成前后两半,前半是A的N次重复,后半是B的N次重复。
  2. 提取重复单元和次数:分别找出前后两半的最小重复单元(也就是A和B),以及重复的次数N。
  3. 生成展开后的字符串:用A重复N-1次,加上B重复N-1次,就是N-1次嵌套的版本。

Python代码实现

首先写一个辅助函数,用来找出字符串的最小重复单元和重复次数:

def get_repeat_unit_and_count(s):
    str_len = len(s)
    # 遍历可能的单元长度,从1到字符串长度的一半
    for unit_len in range(1, str_len // 2 + 1):
        if str_len % unit_len == 0:
            unit = s[:unit_len]
            # 验证重复后是否等于原字符串
            if unit * (str_len // unit_len) == s:
                return unit, str_len // unit_len
    # 如果没有找到重复单元(比如单个字符的情况),单元就是字符串本身,次数为1
    return s, 1

然后是主函数,处理展开逻辑:

def matryoshka_unfold(nested_str):
    # 空字符串直接返回空(对应N=0版本)
    if not nested_str:
        return ""
    
    # 先验证输入合法性:长度必须是偶数
    total_len = len(nested_str)
    if total_len % 2 != 0:
        raise ValueError("输入不是合法的俄罗斯套娃字符串:长度必须为偶数")
    
    mid = total_len // 2
    first_half = nested_str[:mid]
    second_half = nested_str[mid:]
    
    # 提取前后两半的重复单元和次数
    A, n = get_repeat_unit_and_count(first_half)
    B, m = get_repeat_unit_and_count(second_half)
    
    # 验证合法性:前后两半的重复次数必须一致,且单元长度相同
    if n != m or len(A) != len(B):
        raise ValueError("输入不是合法的俄罗斯套娃字符串")
    
    # 生成N-1次嵌套的版本
    return A * (n - 1) + B * (n - 1)

测试验证

咱们用你给的例子测试一下:

# N=3版本 → 输出N=2版本
print(matryoshka_unfold("abababcdcdcd"))  # 输出: ababcdcd
# N=2版本 → 输出N=1版本
print(matryoshka_unfold("ababcdcd"))      # 输出: abcd
# N=1版本 → 输出N=0版本(空)
print(matryoshka_unfold("abcd"))          # 输出: 空字符串
# N=0版本 → 输出空
print(matryoshka_unfold(""))              # 输出: 空字符串

这个实现支持任意合理的N值,只要输入是符合规则的嵌套字符串就行。如果输入不合法(比如长度奇数、前后两半重复次数不一致等),函数会抛出明确的错误提示,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:24:39