387. 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode" 返回 0
s = "loveleetcode" 返回 2
提示:你可以假定该字符串只包含小写字母。
hash&&遍历:
func firstUniqChar(s string) int {
// 遍历,map保存字符个数,再次遍历,找到map中val为1的元素 return
m:=map[rune]int{}
for _,v:=range s{
m[v]++
}
for i,v:=range s{
if m[v]==1{
return i
}
}
return -1
}
扩展:统计第一个出现奇数次的元素,因为找的是【第一个不重复的字符】,直接使用队列,判断元素与队头元素是否相等,相等则队头元素出队,不相等则入队,遍历完成,输出队头元素
func firstUniqChar(s string) int {
//因为找的是【第一个不重复的字符】,直接使用队列,判断元素与队头元素是否相等,相等则队头元素出队,不相等则入队,遍历完成,输出队头元素
queue:=[]byte{s[0]}
low:=0
high:=1
for i:=1;i<len(s);i++{
if high!=low&&s[i]==queue[low]{
low++
}else{
queue=append(queue,s[i])
high++
}
}
if high==low{
return -1
}
return low
}
|