2017-10-08 67 views
3

以下是我努力的求職面試問題。 (不必在列表和集合之間切換,測試它並意識到它缺少預期輸出,步驟太多)。 如果可能的話,尋找正確的答案,或者是我應該如何解決問題的指南。謝謝。字符串的組合

問題:給一個字符串,從它找到所有可能的組合(正面和反面)。 打印組合的所有組合和總數。順序無關緊要。

實施例S = '馬球'

前回答= 'P', 'PO', 'POL', '馬球', '醇', ''010', '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 
+1

[尋找在python給定的字符串的所有可能的排列]的可能的複製(https://stackoverflow.com/questions/8306654/finding-all-possible-permutations-of -a-given-string-in-python) –

回答

2

您可以用兩個nestedfor-loops做到這一點。一個將loop通過startindexesnested一個loops通過endindexes(從start + 1要的s+1長度開始到達到最末端)。

有了這兩個indexesstartend),我們可以用stringslicingappendcombinationlistforward。這會給你所有的combinations,如下所示。

爲了得到扭轉的,你可以做一個for-loop爲你做reversingforward者的順序,但爲了節省空間,下面的代碼中,我們只是append相同indexslicedreversedsolop)。

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 

如果你真的想使代碼cleanshort,你可以做同樣的事情在一個list-comprehension。該logic保持不變,但我們只是壓縮它歸結爲1行:

s = "polo" 

forward = [s[start:end] for start in range(len(s)) for end in range(start+1, len(s)+1)]  
backward = [c[::-1] for c in forward] 

print(forward) 
print(backward) 
print(len(forward) + len(backward)) 

其作爲之前給出了相同的輸出。

希望這會有所幫助!

+0

是啊...我爲範圍內的(len(s))範圍內的([i + 1,len(s)+ 1)]提供了'[s [i:e]]' –

+0

@JonClements我已經添加了'list-comp'以及現在!謝謝 :) –

0

試試這個: