作業幫面試題 字串的組合問題

2021-09-26 08:41:42 字數 1324 閱讀 8138

輸入乙個字串,輸出該字串的所有組合。如:若字串為: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...