扑朔迷离的第一个唯一字符
2023-12-01 21:57:43
第一个唯一字符
在字符串中寻找第一个唯一字符是一个常见的面试问题。为了解决这个问题,我们需要一个算法,能够有效地遍历字符串,并记录每个字符出现的次数。一种常见的方法是使用哈希表,将每个字符作为键,出现的次数作为值。当我们遍历字符串时,我们可以将每个字符作为键添加到哈希表中,并将值初始化为 1。如果我们已经看到该字符,我们将值加 1。最后,我们可以遍历哈希表,找到值为 1 的第一个字符,并返回它的索引。
以下代码演示了如何实现此算法:
def first_unique_char(string):
# 创建一个哈希表
char_counts = {}
# 遍历字符串,并将每个字符的出现次数存储到哈希表中
for char in string:
if char in char_counts:
char_counts[char] += 1
else:
char_counts[char] = 1
# 遍历哈希表,找到第一个值为 1 的字符
for char, count in char_counts.items():
if count == 1:
return string.index(char)
# 如果没有找到唯一字符,返回 -1
return -1
print(first_unique_char("leetcode")) # 0
print(first_unique_char("loveleetcode")) # 2
print(first_unique_char("aabb")) # -1
在第一个示例中,字符串 "leetcode" 中的第一个唯一字符是 "l",它的索引为 0。在第二个示例中,字符串 "loveleetcode" 中的第一个唯一字符是 "v",它的索引为 2。在第三个示例中,字符串 "aabb" 中没有唯一字符,因此返回 -1。
这里有一些其他解决此问题的方法:
-
使用集合(set)存储字符串中的字符。集合是一种数据结构,它只存储唯一的元素。我们可以遍历字符串,并将每个字符添加到集合中。当我们遇到一个字符时,如果它已经在集合中,那么它不是唯一字符,我们可以跳过它。否则,它是唯一字符,我们可以返回它的索引。
-
使用数组存储字符串中的字符的出现次数。我们可以创建一个大小为 256 的数组,其中索引对应于 ASCII 码值。当我们遍历字符串时,我们可以将每个字符的索引值加 1。当我们遇到一个字符时,如果它的索引值大于 0,那么它不是唯一字符,我们可以跳过它。否则,它是唯一字符,我们可以返回它的索引。
-
使用位掩码存储字符串中的字符的出现次数。我们可以创建一个 256 位的位掩码,其中每一位对应于一个 ASCII 码值。当我们遍历字符串时,我们可以将每个字符的索引值对应的位设置为 1。当我们遇到一个字符时,如果它的索引值对应的位已经设置为 1,那么它不是唯一字符,我们可以跳过它。否则,它是唯一字符,我们可以返回它的索引。