R语言实现:生成字符串中I与L相互替换的所有定序组合
R语言实现I/L可互换的字符串全组合生成
需求说明
针对输入的字母字符串,保持原有字符排列顺序不变,仅允许字符I和L互相替换,生成所有合法的组合结果。
示例输入:"IVGLWEA"
预期输出共4种组合:
"IVGLWEA" "LVGLWEA" "LVGIWEA" "IVGIWEA"
实现代码
generate_il_combinations <- function(input_str) { # 将输入字符串拆分为单个字符向量 single_chars <- strsplit(input_str, "")[[1]] # 为每个字符位置生成可选值:非I/L字符固定为原值,I/L位置可选I/L两个值 pos_options <- lapply(single_chars, function(ch) { if (ch %in% c("I", "L")) { return(c("I", "L")) } else { return(ch) } }) # 生成所有位置可选值的笛卡尔积 comb_grid <- expand.grid(pos_options, stringsAsFactors = FALSE) # 将每行的字符合并为完整字符串,去重后返回 res <- apply(comb_grid, 1, paste, collapse = "") return(unique(res)) }
使用方法与测试
直接调用函数传入目标字符串即可:
# 测试示例 test_input <- "IVGLWEA" generate_il_combinations(test_input)
运行输出:
[1] "IVGLWEA" "LVGLWEA" "IVGIWEA" "LVGIWEA"
注意事项
- 上述代码默认区分字符大小写,若需要小写
i/l也支持互换,可将判断条件修改为if (toupper(ch) %in% c("I", "L")),返回值同步增加小写选项即可。 - 若输入字符串中不存在
I或L,函数仅返回原字符串,不会生成冗余结果。 - 若字符串中
I/L的总数量超过20个,生成的组合总数会超过百万级,需留意内存占用情况。
内容的提问来源于stack exchange,提问作者Robert Parker
相关产品推荐
相关产品推荐

