标签:子串 cnt string ++ res 力扣 76 hs size
题目
题解
直接看代码吧
代码
1 #include<iostream> 2 #include<string> 3 #include<unordered_map> 4 using namespace std; 5 class Solution { 6 public: 7 string minWindow(string s, string t) { 8 unordered_map<char, int> hs, ht; 9 //记录频率 10 for (auto c : t) 11 { 12 ht[c]++; 13 } 14 string res; 15 for (int i = 0, j = 0, cnt = 0; i < s.size(); i++) { 16 hs[s[i]]++; 17 //判断当前字符是否为t的字符 如果是则满足了一次 cnt++; 18 if (hs[s[i]] <= ht[s[i]]) { 19 cnt++; 20 } 21 //找j满足hs[s[j]] <= ht[s[j]] 22 //因为分析肯定是s两边必为t的字符 23 //而这里的hs[s[j++]]--; 可以使得之后hs[s[j]] > ht[s[j]] 判断可以成功 即能够可以移动j(左)向右 24 while (j < s.size() && hs[s[j]] > ht[s[j]]) { 25 hs[s[j++]]--; 26 } 27 //cnt == t.size() 是否满足t中字符全有 28 //i - j + 1 < res.size() 是否比当前res还小 找最短 29 if (cnt == t.size() && (res == "" || i - j + 1 < res.size())) { 30 res = s.substr(j, i - j + 1); 31 } 32 } 33 return res; 34 } 35 }; 36 37 int main() { 38 Solution sol; 39 string s = "cabwefgewcwaefgcf"; 40 string t= "cae"; 41 string result=sol.minWindow(s,t); 42 cout << result << endl; 43 }View Code
标签:子串,cnt,string,++,res,力扣,76,hs,size 来源: https://www.cnblogs.com/zx469321142/p/16424129.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。