在编程面试中,有一些问题几乎是“必考题”,比如如何找出字符串中的重复字符。
这个问题看似简单,但却能考察一个开发者对字符串处理的理解、对数据结构的应用以及编写高效代码的能力。
今天,我们就用 Python 来解决这个问题,不仅要让大家理解 核心逻辑,还会带你一步步 调试代码,确保你能真正掌握这个技巧!
优快云大礼包:《2025年最新全套学习资料包》免费分享
一、问题分析:什么是“字符串中的重复字符”?
在开始编码之前,我们先明确一下问题:
假设有一个字符串,比如 "python programming"
,其中 p
、o
、n
、r
、g
和 m
这些字母都至少出现了两次。那么,我们的目标就是找出这些重复出现的字符。
换句话说,我们要遍历字符串,统计每个字符出现的次数,然后筛选出那些出现次数大于 1 的字符。
那么,Python 该如何实现呢?
二、代码实现:用 Python 找出重复字符
我们先来看一个最简单的实现方式,后面再来优化和解析代码逻辑。
2.1 代码实现
# 1. 定义输入字符串
text = "python programming"
# 2. 创建一个空列表用于存储重复字符
duplicates = []
# 3. 遍历字符串中的每个字符
for char in text:
# 4. 统计该字符在字符串中出现的次数
if text.count(char) > 1:
# 5. 如果该字符之前未被加入到列表,则添加进去
if char not in duplicates:
duplicates.append(char)
# 6. 输出重复字符
print("重复的字符:", duplicates)
运行结果:
重复的字符: ['p', 'o', 'n', 'r', 'g', 'm']
我们成功找出了 "python programming"
中的重复字符!
是不是很简单?
但这段代码的执行过程到底是怎样的?它的效率如何?有没有更好的方法?别急,我们一步步来拆解。
三、代码拆解与逐步调试
为了帮助大家彻底理解这段代码,我们来手动模拟它的执行过程,并使用 Python 的调试工具 来一步步分析代码。
3.1 逐步解析代码
我们假设 text = "python programming"
,那么程序执行时的流程如下:
-
1. 创建字符串
text
-
• 变量
text
存储"python programming"
-
-
2. 初始化空列表
duplicates
-
• 该列表用于存储所有找到的重复字符
-
-
3. 遍历字符串
text
的每个字符-
•
char = 'p'
,统计text.count('p')
,发现p
出现了 2 次 -
•
p
不在duplicates
里,所以加入duplicates
-
•
char = 'y'
,统计text.count('y')
,发现y
只出现 1 次,跳过 -
•
char = 'o'
,统计text.count('o')
,发现o
出现 2 次,加入duplicates
-
• 依次处理
n, r, g, m
,因为它们都出现了至少 2 次,所以都加入duplicates
-
最终,我们得到了 duplicates = ['p', 'o', 'n', 'r', 'g', 'm']
,即所有重复的字符。
四、优化代码:提升效率!
虽然上面的代码很简单,但它的效率并不高,因为 text.count(char)
这个操作会重新遍历整个字符串,导致程序的时间复杂度变成了 O(n²),当字符串很长时,会非常耗时。
有没有更好的办法?当然有!
我们可以使用 Python 的 字典(dict) 或 集合(set) 来优化。
4.1 使用字典统计字符出现次数
我们可以使用 dict
来统计每个字符的出现次数,然后筛选出出现次数大于 1
的字符。
text = "python programming"
char_count = {} # 用字典存储字符出现次数
duplicates = [] # 存储重复字符
# 遍历字符串统计次数
for char in text:
char_count[char] = char_count.get(char, 0) + 1
# 找出出现次数大于1的字符
for char, count in char_count.items():
if count > 1:
duplicates.append(char)
print("重复的字符:", duplicates)
优化后的代码效率更高,时间复杂度从 O(n²) 降到了 O(n),大大提升了运行速度!
五、进阶方法:使用 collections.Counter
Python 提供了 collections.Counter
,可以直接统计字符出现次数,让代码更简洁。
from collections import Counter
text = "python programming"
char_count = Counter(text) # 统计每个字符的出现次数
# 过滤出所有出现次数大于1的字符
duplicates = [char for char, count in char_count.items() if count > 1]
print("重复的字符:", duplicates)
这个方法不仅更清晰,效率也很高!
总结
-
1. 基础方法:使用
count()
统计字符出现次数,但时间复杂度较高 O(n²)。 -
2. 优化方法:使用
字典 dict
统计字符频次,提高效率到 O(n)。 -
3. 进阶方法:使用
collections.Counter
让代码更简洁高效。 -
4. 调试技巧:可以使用 Python 的调试模式(如
pdb
)一步步查看代码执行过程,深入理解程序逻辑。
无论你是 Python 初学者,还是准备面试的开发者,这个知识点都是面试高频考题,一定要掌握!
文末福利
这里分享Python 50G大礼包,里面还有Python面试真题,里面干货满满,一次全拿走!
01,Python大礼包
02,Python电子书
03,Python面试集锦
04,Python小白必备手册
05,Python安装包
06,数据分析全套资源
这只是冰山一角,想要完整版的小伙伴下图获取~