解題思路
兩個 index 分別記錄出現次數,每次比對一不一樣。
滑動 window 的時候不用重新計算,而是以「拔掉 left」與「加上 right」的方式節省時間。
程式碼
class Solution { public: vector<int> findAnagrams(string s, string p) { vector<int> ans; int sArr[26] = {0}, pArr[26] = {0}, left = 0; if(p.size() > s.size()) return ans; for(int i=0; i<p.size(); i++) { pArr[p[i] - 'a']++; sArr[s[i] - 'a']++; } while(left <= s.size() - p.size()) { bool isSame = true; for(int i=0; i<26; i++) { if(sArr[i] != pArr[i]) isSame = false; } if(isSame) ans.push_back(left); if(left == s.size() - p.size()) break; sArr[s[left] - 'a']--; sArr[s[left+p.size()] - 'a']++; left++; } return ans; } };
沒有留言:
張貼留言