查找字符串中4字母单词的算法问题:为何遗漏最后一项?
解决Swift中统计4字母单词数量的问题
嗨,我发现你的代码逻辑已经对了大半,问题就出在循环结束后没有处理最后一个单词——因为最后一个单词后面没有空格,循环里的else分支永远不会触发,自然就漏掉了对它的长度检查。比如你输入的"Good Night Lil Peep",循环处理到"Lil"后面的空格时,会检查"Night"的长度(符合4个字母,计数加1),但处理完"Peep"后,循环直接结束,没人去判断它的长度,所以结果少了一个。
修复你原来的代码
只需要在循环结束后,额外加一段逻辑检查最后一个单词的长度就可以了:
func fourLetters(sentence: String) -> Int { var targetNames = 0 var letterCount = 0 for letter in sentence { if letter != " " { letterCount += 1 } else { if letterCount == 4 { targetNames += 1 } letterCount = 0 } } // 补上最后一个单词的检查 if letterCount == 4 { targetNames += 1 } return targetNames }
这样再测试"Good Night Lil Peep",就能得到正确的结果2了。
更简洁的Swift写法
其实Swift提供了更优雅的字符串处理方式,不需要手动计数。你可以把字符串按空白字符分割成单词数组,然后过滤出长度为4的单词,最后统计数量:
func fourLetters(sentence: String) -> Int { // 按任意空白字符分割(支持空格、制表符等),自动忽略空白序列 return sentence.split(whereSeparator: \.isWhitespace) .filter { $0.count == 4 } .count }
这种写法不仅更简洁,还能处理连续空格、多种空白字符的情况,避免手动循环容易出现的边界错误。
内容的提问来源于stack exchange,提问作者David Taylor
相关产品推荐
相关产品推荐

