我正在制作一个多字的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'。
答案 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