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

R语言中如何判断多个字符串是否由相同字母组合构成

R语言实现:自动识别字符向量中同字母异序的字符串分组

核心逻辑

判断多个字符串是否由相同字母(含重复字母计数)仅排列顺序不同组成,只需对每个字符串做标准化处理:拆分为单个字符后按固定规则排序,再重新拼接为标准字符串。标准字符串完全一致的,就属于同一组。
这个逻辑对含重复字母的场景同样生效,比如示例里两个G、一个W、一个P组成的GPWG类字符串,排序后会自动按字母计数生成统一标识,不会出现误判。


基础R实现(无需安装额外包,适合初学者)

1. 构造示例数据

先把测试向量存入变量:

char_vec <- c(
  "YMC",   "YCM",   "MYC",   "CMY",   "CYM",   "MCY",   "MEH",   "HEM",   "EMH",   "MHE",   "EHM",   "HME",
  "CFF",   "FCF",   "FFC",   "AYY",   "YFS",   "YYA",   "SFY",   "YSF",   "FSY",   "SYF",   "YAY",   "FYS",
  "HYP",   "HPY",   "WNP",   "PWN",   "PHY",   "PNW",   "YHP",   "PYH",   "WPN",   "NPW",   "YPH",   "NWP",
  "BHF",   "FHB",   "BFH",   "HBF",   "FBH",   "HFB",   "BQR",   "QRB",   "BRQ",   "RBQ",   "QBR",   "RQB",
  "BRK",   "KRB",   "RBK",   "BKR",   "RKB",   "KBR",   "WDP",   "DPW",   "DWP",   "WPD",   "PDW",   "PWD"
)

2. 编写分组函数并执行

# 生成单个字符串的分组唯一标识
get_group_key <- function(s) {
  # 将字符串拆分为单个字符向量
  split_chars <- strsplit(s, split = "")[[1]]
  # 字符排序后重新拼接为标准key
  paste(sort(split_chars), collapse = "")
}

# 为向量中所有字符串生成分组key,长度和原向量一致
group_keys <- sapply(char_vec, get_group_key, USE.NAMES = FALSE)

# 按key分组,得到所有同字母异序的字符串集合
anagram_groups <- split(char_vec, f = group_keys)

3. 结果说明

执行后anagram_groups是列表格式,每个元素对应一组同字母异序的字符串:

  • key为CMY的组,对应前6个由C、M、Y组成的字符串
  • key为EHM的组,对应接下来6个由E、H、M组成的字符串
  • 含重复字母的"CFF" "FCF" "FFC"会被归入key为CFF的组,匹配字母计数要求
    如果需要给原向量的每个元素打分组标签,直接使用group_keys向量即可。

大数据量提速方案

如果需要处理十万级以上长度的字符向量,可以用stringi包的向量化接口替换基础R的拆分逻辑,运行速度更快:

# 首次使用需先安装:install.packages("stringi")
library(stringi)

# 生成分组key
group_keys_fast <- vapply(
  stri_split_boundaries(char_vec, type = "character"),
  function(x) paste(sort(x), collapse = ""),
  FUN.VALUE = character(1)
)

# 分组逻辑和基础R版本一致
anagram_groups_fast <- split(char_vec, group_keys_fast)

适配特殊场景的调整

  • 如果需要忽略大小写分组,可以在排序前对拆分后的字符做统一大小写处理,比如加一步toupper(split_chars)即可
  • 如果字符串包含数字、特殊符号,上述逻辑依然生效,排序时会按字符编码规则统一处理,不影响分组准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:48:43