
代码1:
- 代码3中,为了保证顺序,单独一个数组保证顺序,一个map保证频数,其实不需要,只需要保存频数,然后再遍历一遍s,即可
- 代码2中,第二次遍历,用到了i,因为range的ch不是byte,所以要用s【i】代替,或者像代码1中一样,进行一次类型转换
func firstUniqChar(s string) byte {
var ss [26]int
for _,v := range s {
ss[v-'a']++
}
for _,v := range s {
if ss[v-'a'] == 1 {
return byte(v)
}
}
return ' '
}
代码2:
func firstUniqChar(s string) byte {
cnt := [26]int{}
for _, ch := range s {
cnt[ch-'a']++
}
for i, ch := range s {
if cnt[ch-'a'] == 1 {
return s[i]
}
}
return ' '
}
代码3:
func firstUniqChar(s string) byte {
ss := make([]byte,0,26)
mp := make(map[byte]int)
for i := 0; i < len(s); i++ {
if mp[s[i]] == 0 {
ss = append(ss, s[i])
}
mp[s[i]]++
}
for _,v := range ss {
if mp[v] > 1 {
continue
}
return v
}
return ' '
}