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

2021-10-19 19:56:19 字數 917 閱讀 5383

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

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

還是套用模板就可以了。

注意兩點:①收縮視窗的時機②本題一旦發現視窗內有滿足的排列,就立即返回

class

solution

int left =0;

int right =0;

int valid =0;

//視窗中已經滿足need中條件的字元個數。

// 記錄最小覆蓋字串的起始索引及長度

int start =

0, len = integer.max_value;

while

(right < s2.

length()

)}/*本題縮小視窗的時機應該是視窗內已經出現了滿足條件的子串。

因為各種排列的長度應該是相同的。s1.length()就是那個標準,因為找的是s1的全排列

*/while

(right - left >= s1.

length()

)char d = s2.

charat

(left)

; left++

;//進行視窗內資料的一系列更新

if(need.

containskey

(d))

window.

put(d, window.

getordefault

(d,0)-

1);}

}}return

false;}

}

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

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

567 字串的排列

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

567 字串的排列

題意理解 查詢乙個字串中的子串是否是另乙個字元的排列 問題分析 陣列滑動視窗 map 將待匹配的字串轉化成字典來比較,每次滑動字串,只需要修改字典中首尾字元的數量即可。對於數量為0的字元,需要從map中刪除。如果不刪除,無法直接用字典相等來判斷。其他做了40分鐘,慢了。一遍準。鏈結bool chec...