You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查找字符串中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:02:40