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

如何递归/穷举地为任意长度字符串插入点并生成所有可能结果?

生成字符串所有插点组合的Bash实现

要生成字符串所有插点组合,核心思路是枚举所有插点位置的开关状态——每个字符间隙要么插点,要么不插,对应二进制位的0和1。比如长度为6的字符串有5个间隙,用5位二进制数就能表示所有可能的插法(1到31对应至少插一个点的情况;如果要包含原字符串就从0开始)。

下面是完整的Bash脚本,直接就能用:

#!/bin/bash

# 读取输入字符串
read -p "输入字符串: " str
[[ -z "$str" ]] && echo "字符串不能为空" && exit 1

len=${#str}
(( gaps = len - 1 ))
# 总共有2^gaps种组合,去掉原字符串的话是2^gaps -1
max=$(( (1 << gaps) - 1 ))

for ((i=1; i<=max; i++)); do
    # 把当前数字转成二进制,补前导零到gaps位
    bin=$(printf "%0${gaps}d" $(bc <<< "obase=2; $i"))
    result=""
    # 遍历每个字符,结合二进制位决定是否插点
    for ((j=0; j<len; j++)); do
        result+=${str:$j:1}
        # 不是最后一个字符的话,检查对应二进制位是否为1,是则插点
        if (( j < gaps )); then
            [[ ${bin:$j:1} == "1" ]] && result+="."
        fi
    done
    echo "$result"
done

脚本说明:

  • 1 << gaps:等价于计算2的gaps次方,快速得到最大枚举数
  • printf "%0${gaps}d":把二进制数补前导零,保证位数和间隙数一致,方便逐个位置判断
  • 内层循环逐个拼接字符,每处理一个字符(除了最后一个),就看对应二进制位是否为1,是则插入.

示例运行:

输入anystr,会输出从a.nystr、an.ystr一直到a.n.y.s.t.r的所有31种组合。

如果需要包含原字符串(不插任何点的情况),只需要把循环起始的i=1改成i=0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:45:35