1 回答
TA贡献1850条经验 获得超11个赞
第一个解决方案
这就是你想要的:
func main() {
var limit int
var name string
_, err := fmt.Scanln(&limit)
if err != nil {
fmt.Println(err)
}
var names []string
var presence []string
for i := 0; i < limit; i++ {
_, err := fmt.Scanln(&name)
if err != nil {
fmt.Println(err)
}
var exist = false
for _, a := range names {
if a == name {
exist = true
break
}
}
if !exist {
names = append(names, name)
presence = append(presence, "NO")
} else {
presence = append(presence, "YES")
}
}
fmt.Println(presence)
}
首先Scanln返回 ,error您需要检查它。
第二:追加到数组必须在内循环之外。尝试使用 debugPrintln()来调试您的算法。
将代码移至单独的函数
为了清楚起见,我建议将存在性检查移至单独的函数:
func exists(a []string, element string) bool {
for _, e := range a {
if e == element {
return true
}
}
return false
}
func main() {
var limit int
var name string
_, err := fmt.Scanln(&limit)
if err != nil {
fmt.Println(err)
}
var names []string
var presence []string
for i := 0; i < limit; i++ {
_, err := fmt.Scanln(&name)
if err != nil {
fmt.Println(err)
}
if !exists(names, name) {
names = append(names, name)
presence = append(presence, "NO")
} else {
presence = append(presence, "YES")
}
}
fmt.Println(presence)
}
优化
在前面的代码中,我们在每次循环中将字符串数组传递给函数。如果数组更大,那就不好了,最好将指向字符串数组的指针传递给函数(或指向字符串的指针数组)。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报