輸入乙個字串,輸出該字串的所有組合。如:若字串為:abc,則應輸出:ab、ac、bc、abc.
當時的第一反應是遞迴,但是對終止條件一直沒想明白,面試官提示乙個字母有兩個狀態,0和1,0代表有,1代表沒有,所以我設定了乙個01陣列儲存標誌位,然後按陣列輸出。
思路1:暴力法。通過舉例子,找規律可以發現當陣列長度》=3之後的規律是一致的,
前n個字元合體即s[:m],拼接上後面s[m:]的每乙個字元。
class solution:
def permutation(self, string):
s = [i for i in string]
result =
for m in range(len(s)):
if m == 0:
#result.extend([i for i in s])
pass
elif m == 1:
for n in range(len(s)-1):
result.extend([s[n]+i for i in s[n+1:]])
else:
result.extend(''.join(s[:m])+i for i in s[m:])
print(result)
思路2:01判斷法。用0代表未選取某字元,1代表選取了某字元,判斷從1到2^n的數字裡面哪些位為1,則對應為字串,這樣自然可以想到用位運算&來實現該過程,&結果為1則代表該位被選取。
def print_result(self, string, n, i):
l =
for j in range(n):
if i & (1《思路3:遞迴法。選擇長度為n的字串中的第乙個字元,然後在剩下的n-1個字元中選擇m-1個字元;不選擇長度為n的字串中的第乙個字元,然後在剩下的n-1個字元中選擇m個字元。
def combine(self, s, n, t):
if n <= 0:
print(''.join(t))
return
if not s:
return
#當前字串在選擇之中
self.combine(s[1:], n-1, t)
t.pop()
#當前字串不在選擇之中
self.combine(s[1:], n, t)
def permutation(self, s, n):
for i in range(2, n+1):#組合字串長度
t =
self.combine(s, i, t)
面試題 字串翻轉
使用 c c 編寫函式,實現字串反轉,要求不使用任何系統函式,且時間複雜度最小,函式原型 char reverse str char str 使用c c 編寫函式,實現字串反轉,要求不使用任何系統函式,且時間複雜度最小,函式原型 char reverse str char str include i...
字串面試題 字串逆序
字串逆序可以說是最經常考的題目。這是一道入門級的題目。給定乙個字串s,將s中的字元順序顛倒過來,比如s abcd 逆序後變成s dcba 基本上沒有這麼考的,放在這裡主要是為了和後面的原地逆序做個對比。很簡單,直接分配乙個與原字串等長的字元陣列,然後反向拷貝一下即可。char reverse cha...
字串處理面試題 字串包含問題
為了準備面試中出現的字串問題,我決定做乙個系列,以我自己的標準,將自己認為比較優秀的字串面試題整理一些。希望這樣做能夠形成解決字串問題的一般思路,能夠比較高效地解決字串問題。這個問題是看了 感謝 v july v 問題描述 有兩個任意字串sting a,sting b,實現如下函式 int cont...