📅  最后修改于: 2023-12-03 14:53:26.369000             🧑  作者: Mango
在一个字符串中找出第一个重复出现的字符是一个经常会遇到的问题,如何优雅地解决这个问题呢?
最朴素的方法是暴力枚举每一个字符,检查它是否在后面的字符中出现,直到找到第一个重复的字符为止。这个算法的时间复杂度是 $O(n^2)$,不太适合处理大规模数据。
我们可以用一个哈希表来存储每个出现过的字符及其出现的位置,然后在遍历字符串时,每扫描一个字符,就去哈希表里查找它是否已经出现过,如果出现过,就找到了第一个重复字符。这个算法的时间复杂度是 $O(n)$,相比之前有了很大的提升。
def first_duplicate(s: str) -> str:
d = {}
for i, c in enumerate(s):
if c in d:
return c
d[c] = i
return None
哈希表的实现依赖于字典的数据结构,而对于仅需判断重复与否的问题,使用集合的数据结构可以得到更简洁的实现。
def first_duplicate(s: str) -> str:
chars = set()
for c in s:
if c in chars:
return c
chars.add(c)
return None
本篇介绍了字符串中第一个重复字符的几种解法,包括朴素算法、哈希表和集合。题目的解法不止这些,可以尝试使用其他数据结构或算法来实现。不过需要注意的是,在实际代码实现中,我们需要考虑一些边界条件和错误处理。