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

Swift:对数组中字符串按字符排序并过滤重复字符组合

解决Swift中过滤字符组成相同的重复字符串问题

嗨,这个需求我完全get到了!你之前要生成字符串的全排列,现在要剔除那些字符组成完全一致只是顺序不同的重复项,你的思路——给每个字符串按字母排序生成特征键——真的很精准,这就是最直接高效的解决方案。

核心思路

给每个字符串生成一个「唯一特征键」:把字符串的字符按字母顺序排序后组成新字符串。比如"CA"排序后得到"AC",这样所有字符组成相同的字符串都会拥有同一个特征键。我们只需要保留每个特征键对应的第一个出现的字符串即可。

具体实现代码

首先写一个生成特征键的辅助函数,然后遍历原数组,用集合跟踪已经见过的特征键,同时收集结果:

// 生成排序后的特征键,可选支持大小写不敏感
func sortedCharacterKey(for str: String, caseInsensitive: Bool = false) -> String {
    let processedString = caseInsensitive ? str.lowercased() : str
    return String(processedString.sorted())
}

// 示例输入
let input = ["AB", "AC", "CA", "CB"]
var seenKeys = Set<String>()
var filteredResult = [String]()

for string in input {
    let key = sortedCharacterKey(for: string)
    // 如果这个特征键没出现过,就保留当前字符串并记录键
    if !seenKeys.contains(key) {
        seenKeys.insert(key)
        filteredResult.append(string)
    }
}

print(filteredResult) // 输出: ["AB", "AC", "CB"]

额外说明

  • 这个方法适用于任意长度的字符串,比如"ABC"和"CBA"也会被正确识别为重复项;
  • 如果需要忽略大小写(比如"aC"和"Ac"视为重复),只需要调用函数时传caseInsensitive: true即可;
  • 结果数组的顺序和原数组中首次出现该特征键的字符串顺序一致,完全符合你的示例预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:16:34