Linux 2个字符串的所有排列和组合列表
让我们说句话Linux 2个字符串的所有排列和组合列表,linux,bash,shell,combinations,permutation,Linux,Bash,Shell,Combinations,Permutation,让我们说句话 qwerty 我需要在字符串之间插入句点。它也可以是任何其他角色 比如说, q.werty qw.erty qwe.rty qwer.ty qwert.y 以上为1个周期或点。因此,5个字母字符串的1个周期组合将生成5个输出。(N-1) 现在为2个周期(2个点)(仅2个示例): 等等 注意:字符串中的2个字母之间不得有2个连续点。此外,在开始字符之前和/或结束字符之后不得有句点 任何人都可以提供一个Shell脚本(sh,bash)用于上面列出所有可能的组合和排列。我尝试过谷歌搜
qwerty
我需要在字符串之间插入句点。它也可以是任何其他角色
比如说,
q.werty
qw.erty
qwe.rty
qwer.ty
qwert.y
以上为1个周期或点。因此,5个字母字符串的1个周期组合将生成5个输出。(N-1)
现在为2个周期(2个点)(仅2个示例):
等等
注意:字符串中的2个字母之间不得有2个连续点。此外,在开始字符之前和/或结束字符之后不得有句点
任何人都可以提供一个Shell脚本(sh,bash)用于上面列出所有可能的组合和排列。我尝试过谷歌搜索,没有发现任何值得参考的内容
编辑:关于如何在bash shell脚本上启动此脚本的任何帮助都将非常有用…您的难题非常有趣,下面是代码:
#!/bin/bash
t=qwerty
echo '---- one dot ----'
for (( i = 1; i < ${#t}; ++i )); do
echo "${t:0:i}.${t:i}"
done
echo '---- two dots ----'
for (( i = 1; i < (${#t} - 1); ++i )); do
for (( j = i + 1; j < ${#t}; ++j )); do
echo "${t:0:i}.${t:i:j - i}.${t:j}"
done
done
所有内容请参见。我不会编写代码,但我可以引导您找到答案 我假设你想考虑所有可能的点数,不只是1或2,而是3, 4,…最大长度为字符串-1 对于字符串中直到最后一个字符的每个字符,有两种可能:有点或没有点。因此对于
n
字符串,有O(2^(n-1))种可能性
您可以编写一个for循环,遍历所有2^(n-1)种可能性。其中的每一个都对应于一个在字母后带有点的输出
让
i
成为for循环的迭代。然后有一个从1到n-1的内部j
循环。如果j
th位为1,则在j
th字母后加一个点 “任何人都可以提供一个Shell脚本吗”-不。这种问题在这里不受欢迎,请仔细阅读,以便更好地理解您在这里应该问什么以及如何提问。好吧。。我为此道歉。。我真的需要知道如何开始。。。!!那么请与我们分享您的尝试。它必须是shell脚本吗?这不是Shell适合的任务类型。感谢您提供的代码。。。。顺便说一句,您已经提供了问题的两个示例的输出。。。但是其他的组合呢??我们必须使用嵌套循环并逐字符读取吗?我将检查并修改代码,看看这是否解决了我的查询。
#!/bin/bash
t=qwerty
echo '---- one dot ----'
for (( i = 1; i < ${#t}; ++i )); do
echo "${t:0:i}.${t:i}"
done
echo '---- two dots ----'
for (( i = 1; i < (${#t} - 1); ++i )); do
for (( j = i + 1; j < ${#t}; ++j )); do
echo "${t:0:i}.${t:i:j - i}.${t:j}"
done
done
---- one dot ----
q.werty
qw.erty
qwe.rty
qwer.ty
qwert.y
---- two dots ----
q.w.erty
q.we.rty
q.wer.ty
q.wert.y
qw.e.rty
qw.er.ty
qw.ert.y
qwe.r.ty
qwe.rt.y
qwer.t.y