让我们说一句话
qwerty
我想要的是我需要在字符串之间插入句点(点数)。它也可以是任何其他角色。
例如,
q.werty
qw.erty
qwe.rty
qwer.ty
qwert.y
以上是1期或点。因此,对于5个字母的字符串,1个句点组合将生成5个输出。 (N-1)
现在有2个时期(2个点)(仅限2个例子):
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
依旧......
注意:字符串中的2个字母之间不能有2个连续的点。此外,在开始角色和/或结束角色之前一定不能有一段时间。
任何人都可以为上面提供一个Shell脚本(sh,bash)来列出所有可能的组合和排列。我试过谷歌搜索并没有找到任何值得参考的内容。
编辑:关于如何在bash shell脚本上启动它的任何帮助都会很棒......
答案 0 :(得分:1)
你的谜题很有趣,所以这里是一个代码:
#!/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
查看Bash Manual的所有内容。
答案 1 :(得分:0)
我不会写代码,但我可以引导你找到答案。
我假设您要考虑所有可能的点数,而不仅仅是1或2,而是3,4,......,直到字符串的长度为止。
对于直到最后一个字符串中的每个字符,有两种可能性:有一个点或没有点。因此对于n
字符串,存在O(2 ^(n-1))种可能性。
你可以编写一个遍历所有2 ^(n-1)种可能性的for循环。这些中的每一个对应于单个输出,字母后面带有点。
让i
成为for循环的迭代。然后有一个内部j
循环,从1到n-1。如果j
位为1,则在j
字母后面加一个点。