gpt4 book ai didi

string - 在golang中寻找最长的单词

转载 作者:IT王子 更新时间:2023-10-29 01:23:04 25 4
gpt4 key购买 nike

尝试使用 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))
}

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

最佳答案

“最佳”解决方案

我们甚至可以利用以下优势将其写得比其他答案更紧凑:

  • 使用元组赋值
  • 用零值(""0)初始化 best 及其长度,并省略对 0 个单词的检查作为 for range 正确处理
  • 不需要将 words 存储为局部变量,因为它只在循环中使用

我们不会因为可读性而损失任何东西:

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"

最紧凑的解决方案

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

利用这一点,我们可以使用命名结果参数(并且所有变量都初始化为其类型的 zero value,除非提供初始值——对于 string""),我们甚至可以把它写得更紧凑,同样不会损失可读性:

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

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

关于string - 在golang中寻找最长的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52029483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com