2 回答
TA贡献1886条经验 获得超2个赞
考虑使用地图进行查找
lookupSpam := make(map[string]bool)
for _, v := range spamWords {
lookupSpam[v] = true
}
然后代替
for _, word := range textArr {
for _, sapmWord := range spamWords {
if word == sapmWord {
return true
}
}
}
可以使用这样的东西
for _, word := range textArr {
_,found:=lookupSpam[word]
if found {
return true
}
}
如果您重复检查同一组单词,则设置一次地图并重复使用它
TA贡献1874条经验 获得超12个赞
您正在尝试比较一个字母和一个字符串。
当你在做for _, word := range text的时候,它不是词,它是letter。如果你想要单词,你必须将字符串分割成一片单词textArr := strings.Split(text, " ")(由空格分割)
func TextHasSpamWords(text string, spamWords []string) bool {
removePunctuation := func(r rune) rune {
if strings.ContainsRune(".,:;", r) {
return -1
} else {
return r
}
}
text = strings.Map(removePunctuation, text)
textArr := strings.Split(text, ` `)
sort.Strings(spamWords)
for _, word := range textArr {
for _, sapmWord := range spamWords {
if word == sapmWord {
return true
}
}
}
return false
}
- 2 回答
- 0 关注
- 136 浏览
添加回答
举报