字符串的组合

时间:2017-10-08 12:34:22

标签: python

以下是我努力解决的求职面试问题。 (在列表和集合之间进行不必要的切换,对其进行测试并意识到它缺少预期的输出,步骤太多)。 如果可能的话,寻找正确的答案,或者指导我应该如何解决问题。谢谢。

问题:给出一个字符串,从中找到所有可能的组合(正面和反面)。 打印所有组合和组合总数。订单无关紧要。

  

示例s ='polo'

     

正面答案='p','po','pol','polo','ol',   'olo','lo','o','l'   反向答案:'o','ol','olo','olop',   'lop','op','p','l'。

我的回答:

count = 0
count2 = -1
length = len(s)
my_list = []
for i in s:
    temp = s[count:]
    temp2 = s[:count2]
    my_list.append(i)
    my_list.append(temp)
    my_list.append(temp2)
    count += 1
    count2 -= 1

my_set = set(my_list) 
for f in my_set:
    print(f)
print(len(my_set)) # Answer for front

new_list = []
for f in my_set:
    new_list.append(f[::-1])

print('Reverse Result:')
for f in new_list:
    print(f)
print(len(new_list)) # Answer for reverse

2 个答案:

答案 0 :(得分:2)

您可以使用两个(abc-item-list a) nested执行此操作。一个将for-loops通过loop startindexes一个nested通过loops end(从{{开始) 1}}到indexes start + 1的长度到达最后)。

使用这两个s+1indexes),我们可以start end使用string slicingappend combination。这将为您提供所有list,如下所示。

要获得相反的结果,您可以按forward combinations的顺序执行for-loop,但为了节省空间,请在下面的代码中,我们仅reversing来自forward append index的{​​{1}} sliced

reversed

输出:

s

如果你真的想制作代码olops = "polo" forward = [] backward = [] for start in range(len(s)): for end in range(start+1, len(s)+1): forward.append(s[start:end]) backward.append(s[::-1][start:end]) print(forward) print(backward) print(len(forward) + len(backward)) ,你可以在['p', 'po', 'pol', 'polo', 'o', 'ol', 'olo', 'l', 'lo', 'o'] ['o', 'ol', 'olo', 'olop', 'l', 'lo', 'lop', 'o', 'op', 'p'] 20 中做同样的事情。 clean保持不变,但我们只需将其压缩到short行:

list-comprehension

,它提供与以前相同的输出。

希望这有帮助!

答案 1 :(得分:0)

试试这个:

   string = "polo"
   x = [string[i:j] for i in range(len(string)) for j in range(len(string),0,-1) if j > i ]
   x.sort()
   print("Forward:",x[::-1])
   print("Reverse:",x[::])