leetcode 字串的排列

2021-10-07 18:48:10 字數 1425 閱讀 4192

輸入乙個字串,列印出該字串中字元的所有排列。

你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。

示例:輸入: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...