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

Python中如何基于另一字符串移除目标字符串对应次数的字符

优化实现方案

原实现的核心问题是每次替换都会遍历整个字符串生成新对象,长字符串场景下性能较差,这里给出两种更优雅、性能更优的实现:

方案1:保留原字符顺序(满足加分要求)

借助collections.Counter统计s2中各字符需要移除的次数,遍历s1逐个判断是否保留,时间复杂度为线性O(len(s1)+len(s2)):

from collections import Counter

def reduce_string(s1, s2):
    remove_counts = Counter(s2)
    result = []
    for char in s1:
        if remove_counts.get(char, 0) > 0:
            remove_counts[char] -= 1
        else:
            result.append(char)
    return ''.join(result)

方案2:无需保留顺序,代码更简洁

直接对两个字符串的字符计数做差,最后拼接结果即可:

from collections import Counter

def reduce_string(s1, s2):
    count_diff = Counter(s1) - Counter(s2)
    return ''.join(char * count for char, count in count_diff.items())

效果验证

两个方案都能兼容s2包含s1不存在字符的情况,测试用例结果符合预期:

  • 输入reduce_string("AAABBBCCCCCCD", "ABBCCC"):输出字符计数为2个A、1个B、3个C、1个D,和需求一致,方案1会输出按s1原序排列的AABBCCCD
  • 输入reduce_string("AAABBBCCCCCCD", "ABBCCCE"):E在s1中不存在,不影响移除逻辑,输出结果和上一条一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:06