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

如何编写仅删除首个相邻重复指定子串的工具函数

实现方案:删除与首次出现的指定子串相邻的重复子串

核心逻辑

仅删除和目标子串首次出现位置左右相邻的重复目标子串,保留首次出现的子串本身以及非相邻的其他内容:

  1. 定位目标子串在原字符串中第一次出现的起止索引
  2. 向左遍历删除所有和首次出现位置相邻的重复目标子串
  3. 向右遍历删除所有和首次出现位置相邻的重复目标子串
  4. 拼接剩余内容得到最终结果

代码实现(Python)

def removedup(original_str: str, target_sub: str) -> str:
    sub_len = len(target_sub)
    original_len = len(original_str)
    # 边界情况处理:目标子串为空或原字符串比目标子串短,直接返回原内容
    if sub_len == 0 or original_len < sub_len:
        return original_str
    # 查找目标子串首次出现的位置
    first_start = original_str.find(target_sub)
    if first_start == -1:
        return original_str
    first_end = first_start + sub_len
    
    # 处理左侧相邻重复子串
    left_cut = first_start
    while left_cut >= sub_len:
        prev_start = left_cut - sub_len
        if original_str[prev_start:left_cut] == target_sub:
            left_cut = prev_start
        else:
            break
    
    # 处理右侧相邻重复子串
    right_cut = first_end
    while right_cut + sub_len <= original_len:
        next_end = right_cut + sub_len
        if original_str[right_cut:next_end] == target_sub:
            right_cut = next_end
        else:
            break
    
    # 拼接最终结果
    return original_str[:left_cut] + target_sub + original_str[right_cut:]

如果你需要示例removedup("user@gmail.com@gmail.com", "@gmail.com")输出@gmail.com,可将最后一行返回逻辑调整为直接保留首次出现的子串和右侧非重复内容,即修改为return target_sub + original_str[right_cut:]即可。

测试用例

  • removedup("user@gmail.com@gmail.com", "@gmail.com") 输出:user@gmail.com
  • removedup("@gmail.com@gmail.com", "@gmail.com") 输出:@gmail.com
  • removedup("testtestabcabc", "test") 输出:testabcabc
  • removedup("aaabbbcccbbb", "bbb") 输出:aaabbbccc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:54:04