题目
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
示例:
s = “abaccdeff” 返回 “b”
s = “” 返回 " "
限制:
0 <= s 的长度 <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
解法一:哈希表计数
将字符串的字符一个个遍历并计数,返回字符串中字符数目为1的字符即可。
–执行时间:36 ms --内存消耗:5.7 MB
func firstUniqChar(s string) byte {
hashmap:=make(map[rune]int)
for _,c:=range s{
hashmap[c]+=1
}
for _,c:=range s{
if hashmap[c]==1{
return byte(c)
}
}
return ' '
}
解法二:Ascii码字典计数(优化)
- 建立一个长度为26的数组
- Ascii码中从小写字母a开始,共有26个字符
- 字符减去a字符的Ascii码刚好为其在数组中的索引
- 所以可以用数组记录对应字符的数量
–执行时间:4 ms --消耗内存:5.8 MB
func firstUniqChar(s string) byte {
charArray:=make([]int,26)
for _,c:=range s{
charArray[c-'a']++
}
for _,c:=range s{
if charArray[c-'a']==1{
return byte(c)
}
}
return ' '
}