使用python查找给定字符串的所有可能旋转

时间:2017-01-03 20:11:16

标签: python

鉴于字符串是“abc”,那么它应该打印出“abc”,“bca”,“cba”

我的方法:找到给定字符串的长度并将它们旋转到长度

def possible_rotation():
    a = "abc"
    b = len(a)
    for i in range (b-1):
        c = a[:i] + a[i:]
        print c

上面的代码只是打印abc,abc。知道我在这里缺少什么吗?

7 个答案:

答案 0 :(得分:2)

您有两个错误:

  • range(b-1)应为range(b);
  • a[:i] + a[i:]应为a[i:] + a[:i]

答案 1 :(得分:2)

def possible_rotation():
    a = "abc"
    b = len(a)
    for i in range (b):
        c = a[i:]+a[:i]
        print c


possible_rotation()

输出:

abc bca cab

你有2个问题。范围问题和轮换逻辑。应该是a[i:]+a[:i]而不是反过来。对于范围range(b-1) should be range(b)

答案 2 :(得分:1)

这就是我所做的。我在集合中使用了deque,A类,然后像这样使用了旋转函数

from collections import deque

string = 'abc'

for i in range(len(string)):
    c = deque(string)
    c.rotate(i)
    print ''.join(list(c))

并给我这个输出。

abc
cab
bca

它的作用。它创建一个deque对象,一个双端队列对象,它有一个旋转方法,旋转需要旋转的步数,并返回向右移动的对象,其步骤数类似于rshift在二进制操作中。通过循环它转移广告产生一个deque对象,我转换为列表,最后转换为字符串。 希望这有帮助

答案 3 :(得分:0)

for i in range(b):
   print(a[i:] + a[:i])

0 - [a,b,c] + []
1 - [b,c]   + [a]
2 - [c ]    + [a,b]

交换列表

答案 4 :(得分:-1)

两件事:

首先,正如评论中已经指出的那样,您应该迭代range(b)而不是range(b-1)。一般来说,range(b)等于[0, 1, ..., b-1],因此在您的示例中为[0, 1, 2]

其次,你改变了两个术语,它应该是:a[i:] + a[:i]

答案 5 :(得分:-1)

无需执行(b-1),您只需执行以下操作:

def possible_rotation():
    a = "abc"
    for i in range(0,len(a)):
         strng = a[i:]+a[:i]
         print strng
possible_rotation()

`

答案 6 :(得分:-1)

这看起来像是作业,但这是使用内置collections.deque的解决方案:

from collections import deque

def possible_rotations(string):
    rotated = deque(string)
    joined = None
    while joined != string:
        rotated.rotate(1)
        joined = ''.join(x for x in rotated)
        print(joined)

测试出来:

>>> print(possible_rotations('abc'))
cab
bca
abc