class Solution {
public:
  /**
   * @param s a string
   * @param p a non-empty string
   * @return a list of index
   */
  bool equals(const vector<int> &a, const vector<int> &b) {
    int l = a.size();
    for (int i = 0; i < l; i++) { 
      if (a[i] != b[i]) {
        return false;
      } 
    } 
    return true;
  }

  vector<int> findAnagrams(string& s, string& p) {
    // Write your code here
    vector<int> ans;
    vector<int> cnt(256, 0), cntP(256, 0);

    if (s.size() < p.size()) {
      return ans;
    }
    for (int i = 0; i < p.size(); i++) {
      cnt[s[i]]++;
      cntP[p[i]]++; 
    }
    if (equals(cnt, cntP)) {
      ans.push_back(0);
    }

    for (int i = p.size(); i < s.size(); i++) {
      cnt[s[i]]++;
      cnt[s[i - p.size()]]--;
      if (equals(cnt, cntP)) {
        ans.push_back(i - p.size() + 1);
      }
    }
    return ans;
  }
};

results matching ""

    No results matching ""