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

如何在Swift中获取字符串的所有大小写组合?

Swift 生成字符串所有大小写组合解决方案

问题回顾

需要实现Swift方法,输入字符串后返回其所有可能的大小写组合。例如输入"abc",需返回包含8种组合的数组:["abc", "Abc", "aBc", "ABc", "abC", "AbC", "aBC", "ABC"],组合总数为2^i(i为字符串字符数)。

问题分析

你之前的实现仅能按顺序逐个将字符大写,只能生成从全小写到全大写的线性组合,无法覆盖所有独立的大小写选择情况(比如仅第二个字符大写的aBc)。正确思路是用二进制掩码表示每个字符的大小写状态:每个字符对应二进制的一位,1代表大写,0代表小写,遍历所有掩码即可生成全部组合。

实现代码

extension String {
    func allCaseCombinations() -> [String] {
        let chars = Array(self)
        let totalCombinations = 1 << chars.count // 等价于 2^chars.count,位运算更高效
        guard totalCombinations > 0 else { return [] }
        
        var result = [String]()
        result.reserveCapacity(totalCombinations) // 预分配内存提升性能
        
        for mask in 0..<totalCombinations {
            var currentString = ""
            for (index, char) in chars.enumerated() {
                // 检查掩码对应位是否为1,决定字符大小写
                if (mask & (1 << index)) != 0 {
                    currentString.append(char.uppercased())
                } else {
                    currentString.append(char.lowercased())
                }
            }
            result.append(currentString)
        }
        return result
    }
}

代码说明

  1. 字符数组转换:将字符串转为[Character],方便通过索引直接访问每个字符。
  2. 组合数计算:用1 << chars.count计算总组合数,位运算比浮点型pow(2, chars.count)更高效且避免精度问题。
  3. 掩码遍历:从0到2^n -1遍历所有掩码,每个掩码的二进制位对应每个字符的大小写状态。
  4. 字符拼接:对每个掩码,逐个判断字符对应的二进制位,拼接出当前组合字符串并加入结果数组。
  5. 性能优化:提前调用reserveCapacity预分配数组内存,避免多次扩容带来的性能损耗。

测试示例

let testString = "abc"
let combinations = testString.allCaseCombinations()
print(combinations)
// 输出:["abc", "Abc", "aBc", "ABc", "abC", "AbC", "aBC", "ABC"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:25:12