如何编写仅删除首个相邻重复指定子串的工具函数
实现方案:删除与首次出现的指定子串相邻的重复子串
核心逻辑
仅删除和目标子串首次出现位置左右相邻的重复目标子串,保留首次出现的子串本身以及非相邻的其他内容:
- 定位目标子串在原字符串中第一次出现的起止索引
- 向左遍历删除所有和首次出现位置相邻的重复目标子串
- 向右遍历删除所有和首次出现位置相邻的重复目标子串
- 拼接剩余内容得到最终结果
代码实现(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.comremovedup("@gmail.com@gmail.com", "@gmail.com")输出:@gmail.comremovedup("testtestabcabc", "test")输出:testabcabcremovedup("aaabbbcccbbb", "bbb")输出:aaabbbccc
内容的提问来源于stack exchange,提问作者user391986
相关产品推荐
相关产品推荐

