LeetCode 字串的排列(滑動視窗)

2021-09-18 02:50:54 字數 1180 閱讀 3979

給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。

換句話說,第乙個字串的排列之一是第二個字串的子串。

示例1:

輸入: s1 = "ab" s2 = "eidbaooo"

輸出: true

解釋: s2 包含 s1 的排列之一 ("ba").

示例2:

輸入: s1= "ab" s2 = "eidboaoo"

輸出: false

注意:

輸入的字串只包含小寫字母

兩個字串的長度都在 [1, 10,000] 之間

思路分析:建立乙個和s1串大小相同的視窗,在s2串中不斷右移,如果某個時候當視窗中各個字元出現的情況與s1中各個字元出現的情況一樣,說明此時視窗中的字串是s1的乙個排列。

class

solution

//第一步:將s1串中的各個字元出現的次數計負數

for(auto ch : s1)

//第二步:將s2前sonesize個字元放入hashmap

for(

int index =

0; index < sonesize;

++index)

else}if

(hashmap.

size()

==0)//第三步:逐漸向右移動視窗

for(

int right = sonesize; right < stwosize;

++right)

else

//移除left,計負數

int left = right - sonesize;

if(hashmap[s2[left]]==

1)else

//如果此時hashmap為空,則說明視窗中各個字元出現的次數與s1串中各個字元出現的次數一樣

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...