輸入乙個字串,列印出該字串中字元的所有排列。
你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。
示例:輸入:s = 「abc」
輸出:[「abc」,「acb」,「bac」,「bca」,「cab」,「cba」]
限制:1 <= s 的長度 <= 8/*
**
std:
:vector:string
>
permutation
(std:
:string s);}
// 對字串進行排序
std:
:sort
(s.begin()
, s.
end())
; std:
:vector:string
> res;
// 標記字元是否遍歷過
std:
:vector<
bool
>
visit
(s.size()
,false);
std:
:string track;
backtrack
(res, s, track, visit)
;return res;}/*
* 回溯函式
* 使用sort函式對字串排序,使重複的字元相鄰,
* 使用visit陣列記錄遍歷決策樹時每個節點的狀態,
* 節點未遍歷且相鄰字元不是重複字元時,
* 則將該字元加入排列字串中,依次遞迴遍歷。
* */
void
backtrack
(std:
:vector:string
>
&res, std:
:string s, std:
:string
&track, std:
:vector<
bool
>
&visit)
// 選擇和選擇列表
for(
int i =
0; i < s.
size()
; i++)if
(i >0&&
!visit[i-1]
&& s[i-1]
== s[i]
) visit[i]
=true
;// 做選擇
track.
push_back
(s[i]);
// 進入下一次決策樹
backtrack
(res, s, track, visit)
;// 撤銷選擇
track.
pop_back()
; visit[i]
=false;}
}
leetcode字串的排列
1.暴力法 求出s1的全排列,然後判斷s2中是否包含s1的排列之一 如下 class solution for int i start i s.size i 結果,超時 2.滑動視窗 維護乙個大小為s1.size 的視窗,使用hashmap1記錄字串s1內的字元情況,hashmap2記錄字串s2中滑...
leetcode 字串的排列 python3
給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 fals...
LeetCode 字串的排列(滑動視窗)
給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 fals...