如何将多个字符插入字符串中的随机非相邻位置

时间:2018-06-18 21:12:28

标签: python python-3.x python-2.7

我正在制作一个多字的anagram生成器,为此我需要在给定字符串中的随机位置插入一些空格。插入的空间也不能彼此相邻,也不能位于弦的末端或开头。如果有人能告诉我如何做到这一点,我将非常感激。

这是我目前的代码:

import enchant
import itertools
d = enchant.Dict("en_US")

while True:
    text = input('Enter text to be anagrammed: ')

    perms = set([''.join(p) for p in itertools.permutations(text.replace(' ', ''))])

    anagrams = []
    for i in perms:
       if d.check(i) == True:
            anagrams.append(i)

    print(anagrams)

例如,对于输入'fartshoes',如果我想在其中插入两个空格,可能的输出将是'far tsho es'。

1 个答案:

答案 0 :(得分:1)

分而治之:

步骤1:生成将插入空格的索引集。这些索引的范围从1到k-1,其中k是输入字符串的长度。当您选择一个索引时,您必须从可能的索引集中删除它以及它的相邻索引。

步骤2:通过在选定位置插入空格来构建最终字符串。

无需生成所有可能的组合或使用任何组合方法。

import random

s = "weholdthesetruthstobeself-evident"
n = 3

possible_spaces = set(range(1, len(s)))
spaces = set()

while len(spaces) < n and possible_spaces:
    space = random.choice(list(possible_spaces))
    spaces.add(space)
    for x in (space-1, space, space+1):
        possible_spaces.discard(x)

output = ''.join((" "+c if n in spaces else c) for n, c in enumerate(s))

print(output)

连续运行的输出:

we holdthesetru thstobeself-ev ident
weh oldthesetruthstobe self-e vident
w eholdthe setruthstobe self-evident
weholdthese tru thstobeself -evident
weholdthesetruth stobe se lf-evident
weho ld thesetruthstobe self-evident