50. 第一个只出现一次的字符【哈希表】

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

限制:

  • 0 <= s 的长度 <= 50000

2. 标签

  • 哈希表

  • 有序哈希表

3. 解法 - 哈希表

3.1 Java

3.2 Kotlin

3.3 复杂度分析

  • 时间复杂度 O(N) :N 是字符串的长度,总共遍历字符串两轮,时间复杂度为 O(N) 。哈希表查找操作的时间复杂度为 O(1) 。所以总的时间复杂度为 O(N)

  • 空间复杂度 O(1) :按照题意,哈希表中最多存储 26 个小写字母,占用常数大小的存储空间。

4. 解法 - 有序哈希表

有序哈希表中的键值对是按照插入顺序排序的。由于哈希表是去重的,法 1 中的第二个遍历是遍历所有字符,法 2 中的第二个遍历是遍历哈希表,所以当字符串非常非常非常长的时候,法 2 会比法 1 减少第二个遍历中的循环次数,效率更高。

4.1 Java

4.2 Kotlin

4.3 复杂度分析

  • 时间复杂度 O(N) :N 是字符串的长度,总共遍历字符串一轮,遍历哈希表一轮(哈希表长度不大于 26 ),时间复杂度为 O(N) 。哈希表查找操作的时间复杂度为 O(1) 。所以总的时间复杂度为 O(N)

  • 空间复杂度 O(1) :按照题意,哈希表中最多存储 26 个小写字母,占用常数大小的存储空间。

4. 参考

最后更新于

这有帮助吗?