分解字串,將其視為第乙個字元和其餘字元的組合,利用這個函式反覆得到
首字母+其餘字串的全排列,直到其餘字串長度為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...