第一个只出现一次的字符

48 阅读1分钟

image.png

代码1:

  1. 代码3中,为了保证顺序,单独一个数组保证顺序,一个map保证频数,其实不需要,只需要保存频数,然后再遍历一遍s,即可
  2. 代码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 ' '
}