567. 字符串的排列
1 class Solution 2 { 3 public: 4 // 判断 s 中是否存在 t 的排列 5 bool checkInclusion(string t, string s) 6 { 7 unordered_map<char, int> need, window; 8 for (char c : t) need[c]++; 9 10 int left = 0, right = 0; 11 int valid = 0; 12 while (right < s.size()) 13 { 14 char c = s[right]; 15 right++; 16 // 进行窗口内数据的一系列更新 17 if (need.count(c)) 18 { 19 window[c]++; 20 if (window[c] == need[c]) 21 valid++; 22 } 23 24 // 判断左侧窗口是否要收缩 25 if (right - left == t.size()) 26 { 27 // 在这里判断是否找到了合法的子串 28 if (valid == need.size()) 29 return true; 30 char d = s[left]; 31 left++; 32 // 进行窗口内数据的一系列更新 33 if (need.count(d)) 34 { 35 if (window[d] == need[d]) 36 valid--; 37 window[d]--; 38 } 39 } 40 } 41 // 未找到符合条件的子串 42 return false; 43 } 44 };
Mamba never out

浙公网安备 33010602011771号