戈朗 : find first character in a String that doesn't repeat

标签 go

我正在尝试编写一个函数,返回在不重复的字符串中找到的第一个字符,到目前为止我有这个:

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.ContainsRunestrings.IndexRune,这样做的好处是只使用 2 个循环而不是多个循环(每个函数都包含内部循环).

关于戈朗 : find first character in a String that doesn't repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857239/

相关文章:

google-app-engine - 如何修复Go 1.11模块未知导入路径,找不到提供包的模块?

Go channel 缓冲和死锁

go - 相互并发的 Go 例程中的死锁错误

amazon-web-services - AWS Golang SDK-如何将DeleteOnTermination放在EBS卷上?

以列表作为参数变量的 Golang Mutation (GRAPHQL)

go - 如何将外部可执行文件添加到 Go 项目

shell - 使用 Golang 安全执行命令(避免远程执行)

variables - Golang 动态变量引用

macos - 前往游览无法在Mac上构建

golang 模板不适用于 httprouter