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

Swift:如何以最低复杂度实现句子中每个单词的字符反转

在Swift中高效反转句子内每个单词的字符

Hey,这个需求我之前刚好碰到过,给你一个能达到最低时间复杂度的实现方案,完全符合你的示例要求!

核心思路

要实现“单词顺序不变,每个单词内部字符反转”,最优的思路是:

  • 先把原字符串拆分成独立单词(考虑到可能有多个空格/换行的情况,用系统的空白字符分割更稳妥)
  • 对每个单词单独反转字符
  • 最后把反转后的单词用空格拼接回去

这个思路的总时间复杂度是O(n),n是原字符串的总长度——毕竟每个字符只会被遍历一次,这已经是这个问题能做到的最优复杂度了,你总不可能不碰每个字符就完成反转对吧😉

完整代码实现(通用场景,支持多空格/换行)

let str = "Hello playground"

// 处理包含多个空白字符的通用情况,过滤掉分割后产生的空字符串
let reversedWords = str.components(separatedBy: .whitespacesAndNewlines)
    .filter { !$0.isEmpty }
    .map { String($0.reversed()) }
let result = reversedWords.joined(separator: " ")

print(result) // 输出:olleH dnuorgyalp

简化版(仅单个空格分隔的场景)

如果你的输入字符串肯定是用单个空格分隔单词,那可以去掉过滤步骤,代码更简洁:

let str = "Hello playground"
let result = str.components(separatedBy: " ")
    .map { String($0.reversed()) }
    .joined(separator: " ")

为什么这个复杂度最低?

  • 分割字符串:系统的components(separatedBy:)是线性遍历原字符串,复杂度O(n)
  • 反转每个单词:每个单词的reversed()方法是O(k)(k是单词长度),所有单词的总长度就是n,所以这一步总复杂度也是O(n)
  • 拼接字符串:joined(separator:)同样是线性遍历所有反转后的单词,复杂度O(n)

整体下来,所有步骤加起来的时间复杂度就是O(n),空间复杂度也是O(n)(需要存储分割后的单词和最终结果),这已经是这个问题的最优解了。

内容的提问来源于stack exchange,提问作者Saranjith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:13:33