以下是我努力解决的求职面试问题。 (在列表和集合之间进行不必要的切换,对其进行测试并意识到它缺少预期的输出,步骤太多)。 如果可能的话,寻找正确的答案,或者指导我应该如何解决问题。谢谢。
问题:给出一个字符串,从中找到所有可能的组合(正面和反面)。 打印所有组合和组合总数。订单无关紧要。
示例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
答案 0 :(得分:2)
您可以使用两个(abc-item-list a)
nested
执行此操作。一个将for-loops
通过loop
start
和indexes
一个nested
通过loops
end
(从{{开始) 1}}到indexes
start + 1
的长度到达最后)。
使用这两个s
(+1
和indexes
),我们可以start
end
使用string
slicing
到append
combination
。这将为您提供所有list
,如下所示。
要获得相反的结果,您可以按forward
combinations
的顺序执行for-loop
,但为了节省空间,请在下面的代码中,我们仅reversing
来自forward
append
index
的{{1}} sliced
。
reversed
输出:
s
如果你真的想制作代码olop
和s = "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[::])