标签:int ++ substr e30 区间 端点 长度 size i++
设单位串长度为k,在母串上维护区间[l,r],右端点每次向右移动k,截取的长为k的字符串tmp,看字符串集里是否有这个串
如果没有,那么[l,r]这一整段都清空掉,l=r=r+k
如果有,那么进行滑动窗口,当且仅当[l,r]区间出现的每种单位串数量<=每种给定集合的单位串数量,l才不往右移动
同时维护[l,r]里包含的单位串数量tot,如果tot=n,那么l就是一个答案
教会了我substr怎么用。。
class Solution { public: vector<int>ans; unordered_map<string,int> cnt; int n,k,len; vector<int> findSubstring(string s, vector<string>& words) { if(words.size()==0)return ans; n=words.size(); k=words[0].size(); len=s.size(); if(n*k>s.size())return ans; for(auto s:words)cnt[s]++; for(int i=0;i<k;i++){ int tot=0; unordered_map<string,int> mp; int l=i,r=i; while(r+k-1<=len-1){ string tmp=s.substr(r,k); if(cnt[tmp]==0){ r+=k;l=r;tot=0; mp.clear();continue; }else { tot++; mp[tmp]++; r+=k; while(cnt[tmp]<mp[tmp]){ string t=s.substr(l,k); mp[t]--;tot--; l+=k; } } if(tot==n)ans.push_back(l); } } return ans; } };
标签:int ++ substr e30 区间 端点 长度 size i++
原文地址:https://www.cnblogs.com/zsben991126/p/12583841.html