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
相关产品推荐
相关产品推荐

