Timeline
Timeline
2026-03-11
init
Sliding window
Problem:
Classic sliding window problem
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | // 2026.3.11 10:58using std::string;using std::vector;class Solution { public: vector<int> findAnagrams(string s, string p) { int i, index, valid = 0, need_valid = 0; int left = 0, right; int slen = s.size(), plen = p.size(); vector<int> need(26, 0); vector<int> curr(26, 0); vector<int> ret; for (i = 0; i < plen; i++) need[p[i] - 'a']++; for (i = 0; i < 26; i++) if (need[i] > 0) need_valid++; for (right = 0; right < slen; right++) { if (right - left + 1 > plen) { index = s[left] - 'a'; if (curr[index] == need[index]) valid--; curr[index]--; left++; } index = s[right] - 'a'; curr[index]++; if (curr[index] == need[index]) valid++; if (valid == need_valid) ret.push_back(left); } return ret; }};// 2026.3.11 11:19 |
acm mode rewrite:
123456789101112131415161718192021222324252627282930313233343536373839404142 | using namespace std;int main(){ int n; string s, p; cin >> s; cin >> p; n = s.size(); unordered_map<char, int> need, curr; for (char ch : p) need[ch]++; int left = 0, right = 0; int curr_valid = 0, need_valid = need.size(); while (right < n) { char ch = s[right]; curr[ch]++; if (curr[ch] == need[ch]) curr_valid++; right++; while (curr_valid == need_valid) { char ch = s[left]; if (right - left == p.size()) cout << left << ' '; if (curr[ch] == need[ch]) curr_valid--; curr[ch]--; left++; } }} |
