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

如何实现生成字符串中!替换为Any的所有组合的函数?

生成字符串中!替换为Any的所有可能组合

我来帮你搞定这个需求!这个问题其实就是要枚举所有!位置替换/不替换的组合情况,用递归的方式实现会非常直观,下面是Python的具体实现:

def gen_combinations(s):
    # 定位第一个感叹号的位置
    exclamation_idx = s.find('!')
    if exclamation_idx == -1:
        # 没有感叹号了,返回当前字符串作为唯一组合
        return [s]
    
    # 分支1:不替换当前这个!,递归处理剩下的字符串
    keep_exclamation = [
        s[:exclamation_idx+1] + remaining 
        for remaining in gen_combinations(s[exclamation_idx+1:])
    ]
    
    # 分支2:把当前!替换成Any,递归处理剩下的字符串
    replace_with_any = [
        s[:exclamation_idx] + 'Any' + remaining 
        for remaining in gen_combinations(s[exclamation_idx+1:])
    ]
    
    # 合并两个分支的所有结果
    return keep_exclamation + replace_with_any

代码逻辑说明

  • 递归的核心思路是分治:每次只处理一个!,拆成「保留原符号」和「替换成Any」两种情况,再递归处理剩下的字符串
  • 当字符串里找不到!时,就触发递归终止条件,返回当前字符串作为一个基础组合
  • 最终把所有分支的结果合并,就能得到所有可能的组合

测试示例

调用这个函数测试你给出的例子:

result = gen_combinations('(test ! with !)')
print(result)
# 输出:['(test ! with !)', '(test ! with Any)', '(test Any with !)', '(test Any with Any)']

如果需要返回集合(和你示例里的格式一致),只需要转成集合即可:set(result),结果就是你要的{'(test ! with !)', '(test Any with !)', '(test Any with Any)', '(test ! with Any)'}

这个方法支持任意数量的!,不管字符串里有多少个感叹号,都能正确生成所有组合~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:02