📅  最后修改于: 2023-12-03 15:07:56.961000             🧑  作者: Mango
在某些情况下,我们需要通过一次遍历字符串来高效地找到第一个重复的字符,而不使用任何额外的数据结构。下面是一种基于哈希表的解决方案,可以在O(n)的时间内实现。
该算法通过哈希表来记录每个字符出现的次数。当一个字符第一次出现时,将其对应的数组元素加一;当字符再次出现时,该数组元素的值就会大于一,这就意味着找到了第一个重复的字符。
def find_first_duplicate(s:str) -> str:
count = [0]*128
for c in s:
if count[ord(c)] == 1:
return c
count[ord(c)] += 1
return ""
count = [0]*128
:用一个长度为128的数组count来记录每个字符出现的次数。由于ASCII码表长度为128,每个字符可以通过其ASCII码值(在0-127之间)来索引count中的对应元素。for c in s
:遍历输入字符串s中的每个字符c。if count[ord(c)] == 1
:如果字符c的出现次数为1,则说明该字符已经出现过一次,是第一个重复的字符,直接返回该字符。count[ord(c)] += 1
:记录字符c出现的次数。return ""
:如果没有重复字符则返回空字符串。通过哈希表能够在一次遍历中高效地找到字符串的第一个重复字符,这可以提高程序的效率同时不占用额外的内存空间。但需要注意的是,该算法假定输入字符串只包含ASCII字符,否则需要使用更大的哈希表或其他数据结构。