LeetCode 567 字串的排列

2021-10-01 08:26:37 字數 604 閱讀 6139

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

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

示例1:

輸入: s1 = 「ab」 s2 = 「eidbaooo」 輸出: true 解釋: s2 包含 s1 的排列之一 (「ba」).

示例2:

輸入: s1= 「ab」 s2 = 「eidboaoo」 輸出: false

注意:輸入的字串只包含小寫字母 兩個字串的長度都在 [1, 10,000] 之間

第乙個最直接的方法是 列出s1的所有排列,乙個個在s2中查詢.這個時間複雜度o(n^n),並且字串長度很長,不可行.

第二個方法滑動視窗法:

判讀是否包含s1, 通過滑動視窗的方法,每次擷取s2中和s1長度相等的子串,判斷兩個字元的數量是否一致.

如何統計? 由於只有26個英文本母,可以用計數排序來統計,建立乙個長度為26的陣列,下表0-25對應a-z,值為對應字母出現的次數.

判斷條件: 先統計s1的字元數量count1,再統計s2中與之長度相等的子串的字元數量count2,比較兩者是否相同.

參考: 字串排列

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 字串的排列

字串的排列是否在另乙個字串中 說明 各個元素個數相同的字串都是原字串的排列 滑動視窗 class solution else memo s1 i 記錄各個字元的個數 int comp 0 unordered map char int submemo for int i 0 isize i 前面的視窗...