尝试使用句子中的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))
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是实现这一目标的最佳方法.还有其他优雅的方法吗?我知道使用sort还有一种方法,但我更喜欢使用单词之间的迭代方式.
我们甚至可以利用以下内容将其写成比其他答案更紧凑:
best用零值(""和0)初始化它的长度,并省略检查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
}
Run Code Online (Sandbox Code Playgroud)
测试它:
fmt.Printf("%q\n", longestWord(""))
args := "Monday Tuesday Friday Sunday Wednesday"
fmt.Printf("%q\n", longestWord(args))
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
""
"Wednesday"
Run Code Online (Sandbox Code Playgroud)
请注意,存储长度best是可选的,纯粹是出于优化目的,因为如果有的话best,它的长度总是如此len(best).
利用这一点,并且我们可以使用命名结果参数(并且所有变量都被初始化为其类型的零值,除非提供初始值 - 对于string是""),我们甚至可以将其写得更紧凑,再次失去任何东西从可读性:
func longestWord(s string) (best string) {
for _, word := range strings.Split(s, " ") {
if len(word) > len(best) {
best = word
}
}
return
}
Run Code Online (Sandbox Code Playgroud)
测试和输出是相同的,在Go Playground上试试.同样,在大多数情况下,与我们存储长度时相比,这可能稍微慢一些.
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |