string – 在golang中查找最长的单词

前端之家收集整理的这篇文章主要介绍了string – 在golang中查找最长的单词前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试使用句子中的Go找到最长的单词.

目前我正在使用这种方法

func longestWord(s string) string {

    newArr := strings.Split(s," ")

    l := len(newArr[0])
    long := newArr[0]
    var result string
    // fmt.Println(long)
    for _,lenString := range newArr {

        if len(lenString) > l {
            // ll := len(lenString)
            // l := len(lenString)
            d := &l
            p := &long
            c := &result
            *d = len(lenString)
            *p = lenString
            *c = lenString
            // fmt.Println(lenString)
        } else {
            c := &result
            *c = newArr[0]
        }

    }
    return result
}

func main() {
    args := "Monday Tuesday Friday Sunday Wednesday"
    fmt.Println(longestWord(args))
}

但我不确定这是实现这一目标的最佳方法.还有其他优雅的方法吗?我知道使用sort还有一种方法,但我更喜欢使用单词之间的迭代方式.

“最佳”解决方

我们甚至可以利用以下内容将其写成比其他答案更紧凑:

>使用元组分配
>使用零值(“”和0)初始化最佳值和长度,并省略检查0个字符作为范围正确处理
>不需要将单词存储为局部变量,因为它仅在循环中使用

我们失去了可读性:

func longestWord(s string) string {
    best,length := "",0
    for _,word := range strings.Split(s," ") {
        if len(word) > length {
            best,length = word,len(word)
        }
    }
    return best
}

测试它:

fmt.Printf("%q\n",longestWord(""))
args := "Monday Tuesday Friday Sunday Wednesday"
fmt.Printf("%q\n",longestWord(args))

输出(在Go Playground上试试):

""
"Wednesday"

最紧凑的解决方

请注意,存储最佳长度是可选的,纯粹是为了优化目的,因为如果我们有最好的,它的长度总是len(最好).

利用这个,并且我们可以使用命名结果参数(并且所有变量都被初始化为其类型的zero value,除非提供初始值 – 对于字符串是“”),我们甚至可以将它写得更紧凑失去可读性:

func longestWord(s string) (best string) {
    for _," ") {
        if len(word) > len(best) {
            best = word
        }
    }
    return
}

测试和输出是相同的,在Go Playground上尝试.再次,在大多数情况下,与我们存储长度时相比,这可能稍微慢一点.

猜你在找的Go相关文章