leetcode 字串的排列(迴圈以及遞迴)

2021-10-03 13:37:47 字數 1437 閱讀 9356

分解字串,將其視為第乙個字元和其餘字元的組合,利用這個函式反覆得到

首字母+其餘字串的全排列,直到其餘字串長度為1返回。

最終利用list(set(lst))對lst去重。

理解簡單,書寫便捷,缺點是耗時較久。

class

solution

:#遞迴

defpermutation

(self, s:

str):if

len(s)==1

:return

[s] lst=

for index in

range

(len

(s))

: rets=self.permutation(s[

:index]

+s[index+1:

])for ret in rets:

+ret)

return

list

(set

(lst)

)

參考了「he___jia」的題解,筆者手寫**。

主要思路是:

從乙個字元開始,每輪迴圈增加乙個字元,

在之前字元全排列的基礎上逐空插入下乙個字元,最終得到多乙個字元的全排列,迴圈下去,得到所有字元的全排列。

class

solution

:#迴圈

defpermutation

(self, s:

str)

: rets=

set(s[0]

) index,l=1,

len(s)

#迴圈開始

while

(index<

len(s)):

temp=

set(

)for ret in rets:

for j in

range

(len

(ret)+1

):string=ret[

:j]+s[index]

+ret[j:

] temp.add(string)

index+=

1 rets=temp

return

list

(rets)

筆者手寫的遞迴740ms,迴圈76ms(原迴圈題解作者為40ms,膜拜)。

leetcode字串的排列

1.暴力法 求出s1的全排列,然後判斷s2中是否包含s1的排列之一 如下 class solution for int i start i s.size i 結果,超時 2.滑動視窗 維護乙個大小為s1.size 的視窗,使用hashmap1記錄字串s1內的字元情況,hashmap2記錄字串s2中滑...

leetcode 字串的排列

輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba 限制 1 s 的長度 8 std vector string permutation std string s 對字串進行...

leetcode 字串的排列 python3

給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 fals...