使用這種方法的思想是: 對於乙個字串中的元素, 考慮他和除了他之外的其他所有的元素.str_input = 'ab'
str_set =
defpermu
(str = 'abc'):
for i in str:
str_tem = str.replace(i, '')
if len(str_tem) > 0:
permu(str_tem)
else:
print(''.join(str_set))
str_set.pop()
permu(str_input)
重要的地方在於pop這個操作, 在每次加入進去新的元素之後,最後都要把這個元素再重新刪除掉.
針對每乙個字元,都考慮兩種情況,首先是,這個字元被選進整個組合當中,然後在考慮沒有被選入到整個組合當中.## 組合:
對乙個字串進行組合,考慮最極端的情況是:針對字串中的每乙個字元都沒有選入到我們的組合當中去:
str_input = 'abc'
result_set =
str_set =
defpermu
(str='abc'):
i = str[0]
str_tem = str.replace(i, '')
#第乙個值沒有被選中
if len(str_tem) > 0:
permu(str_tem)
else:
#print(''.join(str_set))
result_set.add(''.join(str_set))
#第乙個值被選中了
if len(str_tem) > 0:
permu(str_tem)
else:
#print(''.join(str_set))
result_set.add(''.join(str_set))
str_set.pop()
permu(str_input)
print(result_set)
tem = sorted(result_set)
tem_1 = sorted(tem, key=len)
print(tem_1)
同樣, 重點是在選進到組合當中之後,我們要將其pop彈出
同時,由於組合不需要進行反覆的遍歷,僅僅需要從前到後掃瞄一遍即可.所以在實際操作中,針對的都是第0個元素盡心判斷.
python 字串的排列
給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 輸入 s1 ab s2 eidboaoo 輸出 false 注意 輸入的...
字串的排列 C 實現
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。牛客網題目鏈結 需要兩步即可解決問題 using ...
字串的所有排列 python
在給定乙個字串abc,輸出該字串的所有排列組合 abc acb bac bca cab cba 遞迴法 class solution def permutation self,ss if len ss 1 return ss res set for i in range len ss 每乙個j是pe...