Leetcode 567 字串的排列

2022-03-27 00:08:56 字數 1287 閱讀 4465

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

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

示例1:

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

輸出: true

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

示例2:

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

輸出: false

class solution 

if(arrays.equals(cnt1,cnt2))

return true;

for(int i = len1; i < len2; i++)

return false;

}}

/*

* 思路:

* 注意到每次進行視窗滑動時,只統計了一進一出兩個字元,但卻比較了整個cnt1和cnt2 陣列

* 我們可以用乙個變數 diff 來記錄cnt1 與 cnt2 的不同值的個數,這樣判斷cnt1 和cnt2 是否相等就轉換成了判斷diff是否為0

* 每次視窗滑動,記一進一出兩個字元 x 和 y

* 若x == y 則對cnt2 無影響,直接跳過

* 若 x != y ,對於字元x,在修改cnt2之前若有 cnt2[x] == cnt1[x],則將diff++,在修改cnt2之後若有 cnt2[x] == cnt1[x] 則將diff-- 字元y 同理

* 此外,為簡化上述邏輯,我們可以只用乙個陣列 cnt ,其中cnt[x] = cnt2[x] - cnt1[x],將cnt1[x] 與cnt2[x]的比較替換成cnt[x] 與0 的比較

*/class solution

for(int i : cnt)

if(diff == 0)

return true;

for(int i = len1; i < len2; i++)

return false;

}}

class solution 

int left = 0;

for(int right = 0; right < m; right++)

if(right - left + 1 == n)

return true;

}return false;

}}

LeetCode 567 字串的排列

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

leetcode 567 字串的排列

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

LeetCode 567 字串的排列

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