首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以短而有效的方式从输入字符串生成字谜?

如何以短而有效的方式从输入字符串生成字谜?
EN

Stack Overflow用户
提问于 2021-12-19 12:55:48
回答 2查看 102关注 0票数 0

编写一个程序来生成一个输入字符串的所有潜在的字谜。

例如,"biro“的潜在字谜是

biro bior brio broi boir bori ibor irbo iobr iorb rbio rboi ribo riob robi obir obri oirb orbi orib

我在论坛上找不到对这个问题的具体更正,所以如果这是一个副本,请随时将我发送到我应该看到的主题。

我是个初学者,对Python还不太了解,还没有为这个练习使用正确的函数和方法。我想出这个是为了测试一些东西。但这完全是一团糟,它不能完成工作,不要浪费时间去破解它:

代码语言:javascript
运行
复制
texte = "biro"
liste = list(texte)
n_liste = []
for itera, f in enumerate(liste) :
   if f == liste[0]:
       n_string = str(liste[itera])+str(liste[(liste.index(f)+1):])
   if f == liste[itera] and (itera >= 1):
       n_string = str(liste[0])+str(liste[liste.index(f)])+str(liste[(liste.index(f)+1):])
   if f == liste[len(liste)-1]:
       n_string = str(liste[0])+str(liste[liste.index(f):])
   n_liste.append(n_string)
print(n_liste)

要处理的文本应该是输入,而不是str变量。有没有任何有效的方法来找出一个给定字符串的字谜,不管它有多长?(不使用图书馆)

EN

回答 2

Stack Overflow用户

发布于 2021-12-19 13:49:26

您可以制作一个递归生成器:

代码语言:javascript
运行
复制
def anagrams(S,anagram=""):
   if not S:                    # no more characters,
      yield anagram             # return completed anagram
      return
   for i,c in enumerate(S):     # with each letter at current position
      yield from anagrams(S[:i]+S[i+1:],anagram+c) # add sub-anagrams

产出:

代码语言:javascript
运行
复制
for a in anagrams('biro'): print(a)
biro
bior
brio
broi
boir
bori
ibro
ibor
irbo
irob
iobr
iorb
rbio
rboi
ribo
riob
robi
roib
obir
obri
oibr
oirb
orbi
orib

这也可以通过迭代的方法实现(返回列表),从列表中的原始字符串开始,然后通过将字符与其余位置中的字符交换到每个位置,逐步展开列表。

代码语言:javascript
运行
复制
def anagrams(S):
    result = [S]
    for i in range(len(S)):                # position to swap into
        result,partial = [],result
        for p in partial:                  # partially expanded so far
            for j,c in enumerate(p[i:],i): # swap with each remaining char.
                result.append(p[:i]+c+p[i:j]+p[j+1:]) # expanding result
    return result
票数 1
EN

Stack Overflow用户

发布于 2021-12-19 13:38:27

代码语言:javascript
运行
复制
def anagrams(values):
    result = []

    if len(values) == 0:
        return [""]

    for first_index in range(len(values)):
        first = values[first_index]
        rest  = values[:first_index] + values[first_index+1:]
        for rest_permutation in anagrams(rest):
            result.append(first + rest_permutation)

    return result

# Example
print(anagrams("biro"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70411592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档