尝试使用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 :(得分:7)
我们甚至可以利用以下优势,使其比其他答案更紧凑:
best
和""
)初始化0
及其长度,并在for range
处理正确的情况下省略对0个单词的检查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
而言,其初始值为{{ 1}}),我们甚至可以将其编写得更紧凑,而又不会因可读性而损失任何内容:
""
测试和输出相同,请在Go Playground上进行尝试。同样,在大多数情况下,与我们存储长度相比,这可能会稍微慢一些。
答案 1 :(得分:4)
那完全可行!您可以使它更短一些,同时使用更长的变量名来解释您的意图。
func longestWord(s string) string {
words := strings.Split(s, " ")
if len(words) == 0 {
return ""
}
best := words[0]
best_length := 0
for _, word := range words {
if len(word) > best_length {
best = word
best_length = len(word)
}
}
return best
}
如果愿意,可以更改此项以跟踪指针而不是单词本身。
答案 2 :(得分:1)
我会这样:
func longestWord(s string) string {
newArr := strings.Split(s, " ")
longestWord := ""
longestLength := 0
// loop through the array
for _, word := range newArr {
// save length of word in the actual iteration
length := len(word)
// if length is larger, than longest
if length > longestLength {
// save the new longest word
longestWord = word
longestLength = length
}
}
// return the longest word
return longestWord
}
实施可以在go playground
上找到