Leetcode刷題567 字串的排列

2021-10-13 17:54:38 字數 1417 閱讀 3583

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

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

示例1:

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

輸出: true

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

示例2:

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

輸出: false

感謝labuladong大神,傳送門我寫了套框架,把滑動視窗演算法變成了默寫題。

class solution 

//方法二:使用陣列儲存字串s1和s2中字元出現的次數

//時間複雜度o(mn),空間複雜度o(1)

private boolean checkinclusionii(string s1, string s2)

int left = 0, right = 0;

//統計視窗中滿足字串s1中字元的個數

int valid = 0;

char str = s2.tochararray();

while (right < str.length)

//收縮視窗

while (right - left >= s1.length())

char d = str[left];

left++;

//更新視窗資料

if (need[d] > 0 && need[d] >= window[d])

//收縮視窗,視窗中字元個數減1

window[d]--;}}

return false;

}//方法一:定義兩個map分別儲存字串s1和s2中字元出現的次數

//時間複雜度o(mn),m為s1字元個數,n為s2字元個數

//空間複雜度o(m)

private boolean checkinclusioni(string s1, string s2)

int left = 0, right = 0;

//統計視窗中滿足字串s1中字元的個數

int valid = 0;

char str = s2.tochararray();

while (right < str.length)

}//收縮視窗

while (right - left >= s1.length())

char d = str[left];

left++;

//更新視窗資料

if (need.containskey(d))

//收縮視窗,視窗中字元個數減1

window.put(d, window.get(d) - 1);}}

}return false;

}}

leetcode每日一題 567 字串的排列

題目 給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。思路 滑動視窗求解 用字典dic1 統計s1中的元素組成。用字典dic2統計 與s1等長的s2子串 的元素組成。當dic1 dic2,即可返回true。解答 clas...

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