我正在尝试编写一个函数,返回在不重复的字符串中找到的第一个字符,到目前为止我有这个:
package main
import (
"fmt"
"strings"
)
func check(s string) string {
ss := strings.Split(s, "")
smap := map[string]int{}
for i := 0; i < len(ss); i++ {
(smap[ss[i]])++
}
for k, v := range smap {
if v == 1 {
return k
}
}
return ""
}
func main() {
fmt.Println(check("nebuchadnezzer"))
}
不幸的是,在 Go 中,当您迭代 map 时,无法保证顺序,所以每次我运行代码时,我都会得到不同的值,有什么指示吗?
最佳答案
使用 map 和 2 个循环:
play
func check(s string) string {
m := make(map[rune]uint, len(s)) //preallocate the map size
for _, r := range s {
m[r]++
}
for _, r := range s {
if m[r] == 1 {
return string(r)
}
}
return ""
}
如果您使用 strings.ContainsRune
、strings.IndexRune
,这样做的好处是只使用 2 个循环而不是多个循环(每个函数都包含内部循环).
关于戈朗 : find first character in a String that doesn't repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857239/