替换字符串中连续出现的指定字符串

本文介绍了一种高效的字符串替换算法,该算法能将一个字符串中连续出现的指定子串替换成新的字符串,仅替换一次,避免了多次重复替换的问题。通过实例演示了算法的具体应用,如将123abcabc中的abc替换成X,结果为123X。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

替换字符串中连续出现的指定字符串

替换连续字符串

【题目】
给定三个字符串s、old和new,
把s中所有old的子串全部替换成new字符串,对连续出现old的部分要求只替换成一个new字符串,返回最终的结果字符串。

【举例】
s=“123abc”,old=“abc”,new=“4567”,返回"1234567"。
s=“123”,old=“abc”,new=“456”,返回"123"。
s=“123abcabc”,old=“abc”,new=“X”,返回"123X"。

算法思路

连续出现的指定字符串只替换一次
指定字符串替换为连续的0,连续出现的指定字符串则也为连续的0
每次在第一次出现0时,将保留的字符串和替换字符串陆续拼接

相应代码

# 指定字符串为连续0
def clear(arr, end, length):
    for i in range(length):
        arr[end - i] = 0

# 替换连续字符串
def remove_continue_str(s, old, new):
    if s is None or old is None or new is None or len(s) == 0 or len(old) == 0 or len(new) == 0:
        return s
    arr = list(s)
    match = 0
    # 指定字符串为0
    for i in range(len(s)):
        if s[i] == old[match]:
            match += 1
            if match == len(old):
                clear(arr, i, len(old))
                match = 0
        else:
            match = 0
    res = ""
    cur = ""
    # 拼接替换字符串
    for i in range(len(arr)):
        if arr[i] != 0:
            cur += arr[i]
        # 第一次遇见0,只拼接一次
        elif arr[i] == 0 and (i == 0 or arr[i - 1] != 0):
            res += cur + new
            cur = ""
    # 最后拼接
    res += cur
    return res

# 简单测试
if __name__ == '__main__':
    s = "123abc"
    old = "abc"
    new = "4567"
    print(remove_continue_str(s, old, new))  # 1234567

    s = "123"
    old = "abc"
    new = "456"
    print(remove_continue_str(s, old, new))  # 123

    s = "123abcabc"
    old = "abc"
    new = "X"
    print(remove_continue_str(s, old, new))  # 123X

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值