如何使用Python删除字符串中重复字符的首次出现
删除重复字符首次出现的实现方案
原代码问题分析
现有代码的逻辑是遍历字符串时仅保留首次出现的字符,自动过滤后续所有重复项,因此处理abcdea时会删除末尾重复的a,得到abcde,和要求的「删除重复字符的第一次出现、保留后续内容」逻辑完全相反。
正确实现思路
- 先统计字符串中每个字符的总出现次数,确定哪些字符属于重复字符
- 单独记录已经跳过首次出现的重复字符,避免后续遍历的时候重复跳过
- 二次遍历原字符串,仅跳过重复字符的第一次出现,其余所有字符全部保留到结果中
实现代码
from collections import Counter def remove_rep(x): # 统计每个字符的出现频次 char_count = Counter(x) # 记录已经跳过首次出现的重复字符 skipped = set() result = [] for char in x: # 仅跳过重复字符的第一次出现 if char_count[char] > 1 and char not in skipped: skipped.add(char) continue result.append(char) return ''.join(result) # 测试 print(remove_rep('abcdea'))
运行上述代码输出结果为bcdea,符合预期。
无依赖实现版本
如果不想引入collections依赖,也可以手动统计字符频次:
def remove_rep(x): # 手动统计字符频次 char_count = {} for char in x: char_count[char] = char_count.get(char, 0) + 1 skipped = set() result = [] for char in x: if char_count[char] > 1 and char not in skipped: skipped.add(char) continue result.append(char) return ''.join(result)
内容的提问来源于stack exchange,提问作者Marioko53
相关产品推荐
相关产品推荐

