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

技术问询:判断目标字符串是否为模式串的滑动重复子串

判断目标串是否为模式串的滑动重复子串

这个问题的核心其实可以简化成:判断目标串是否是模式串无限重复后的某个连续子串。下面给你一个简单高效的解决方案,附带上逻辑解释和代码示例。

核心思路

不需要真的生成无限长的字符串(既浪费内存也没必要),只需要用一个小技巧:把模式串拼接成自身的两倍(比如 pattern + pattern),然后检查目标串是不是这个拼接后字符串的子串就行。

为什么两倍就足够?

  • 假设模式串长度为n,任何能在无限重复串中找到的目标串,要么完全落在单个模式串里,要么跨越两个相邻的模式串。而 pattern*2 已经包含了所有可能的跨边界情况——比如从模式串的第k个字符开始,到下一个模式串的第m个字符结束的所有可能片段,都能在两倍串里找到。

边界情况处理

  • 如果模式串是空字符串:只有当目标串也为空时,才返回 True(毕竟空串无限重复还是空串)。
  • 如果目标串是空字符串:直接返回 True(空串是任何字符串的子串)。

代码示例(Python)

def is_sliding_repeat(target: str, pattern: str) -> bool:
    # 处理模式串为空的特殊情况
    if not pattern:
        return not target
    # 空目标串直接返回True
    if not target:
        return True
    # 检查目标串是否在两倍模式串中
    return target in pattern * 2

验证你的示例

用你给出的例子测试这个函数,全部符合预期:

  • 模式串 'abcd',目标串 'abcdabcd' → 返回 True(完全匹配两倍串)
  • 目标串 'abcd' → 返回 True(在两倍串的前半部分)
  • 目标串 'bcdabcdab' → 返回 True(从两倍串的索引1开始截取到索引9就是这个串)
  • 目标串 'cdabc' → 返回 True(索引2到6的子串)
  • 目标串 'da' → 返回 True(索引3到4的子串)
  • 目标串 'ab'/'cd' → 都能在两倍串中找到,返回 True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:08:27