题目描述
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例1
输入:s = "abaccdeff"
输出:'b'
示例2
输入:s = ""
输出:' '
提示
0 <= s 的长度 <= 50000
Leetcode链接:剑指offer面试题50:第一个只出现一次的字符
算法分析
先遍历一遍字符串,用哈希表记录每个字符出现的次数;再扫描一遍字符串,找到哈希表中第一个值为1的字符即可。
复杂度分析
问题规模为字符串的长度n
- 时间复杂度:O(n),需要遍历一遍字符串。
- 空间复杂度:O(1),因为s只包含小写字母,所以map的大小是有限的,可以看做常数。
Golang代码如下
func firstUniqChar(s string) (res byte) {
char := make(map[byte]int)
for _, v := range s {
char[byte(v)]++
}
for _, v := range s {
if char[byte(v)] == 1 {
return byte(v)
}
}
return ' '
}