在Golang中,我们常常需要检查一个单词是否可以由另一个单词中的字符组成。这个功能在很多情况下都很有用,比如判断一个字符串是否是另一个字符串的字母重排。在本文中,php小编新一将为大家介绍一种简洁高效的方法来实现这个功能。通过这个方法,我们可以轻松地判断一个单词是否可以由另一个单词中的字符组成,从而提高我们的代码效率。让我们一起来看看具体的实现方法吧!
问题内容
我尝试了下面的 golang 代码来检查第一个字符串是否可以由第二个字符串组成。这段代码有什么可以改进的地方吗?
package main
import (
"fmt"
"strings"
)
func main() {
words := []string{"hello", "ellhoo"}
result := "NO"
s := words[0]
for i := 0; i < len(words[0]); i++ {
if strings.Contains(words[1], string(s[i])) == false {
result = "NO"
break
} else {
result = "YES"
words[1] = strings.Replace(words[1],string(s[i]),"",1)
}
}
fmt.Println(result)
}
解决方法
记录地图中源字符串中每个符文的计数。对于目标字符串中的每个符文,如果地图中的计数为零,则失败。递减计数。
代码如下:
// canmake reports whether t can constructed from the runes in s.
func canmake(t, s string) bool {
m := map[rune]int{}
for _, r := range s {
m[r]++
}
for _, r := range t {
if m[r] == 0 {
return false
}
m[r]--
}
return true
}
以下示例展示了如何使用它:
func main() {
fmt.Println(canmake("hello", "ellhoo"))
fmt.Println(canmake("hello", "elhoo")) // insufficent number of l
fmt.Println(canmake("hello", "elloo")) // mising h
}
以上就是Golang 代码检查第一个单词是否可以由第二个单词组成的详细内容,更多请关注编程网其它相关文章!