Find All Anagrams in a String Solutions in C++
Number 438
Difficulty Medium
Acceptance 43.4%
Link LeetCode
Other languages Go
Solutions
C++ solution by haoel/leetcode
// Source : https://leetcode.com/problems/find-all-anagrams-in-a-string/// Author : Manu Gond// Date : 2019-10-06class Solution {public:vector<int> findAnagrams(string s, string p) {vector<int>result;vector<int>v1(26);if(s.size()<p.size()){return result;}for(int i=0;i<p.size();i++){v1[p[i]-97]++;}for(int i=0;i<=(s.size()-p.size());i++){vector<int>v2(26);for(int index=i;index<(i+p.size());index++){v2[s[index]-97]++;}if(v1==v2){result.push_back(i);}}return result;}};
C++ solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/find-all-anagrams-in-a-string/description//// Author : liuyubobobo/// Time : 2017-11-10#include <iostream>#include <vector>#include <string>#include <cassert>using namespace std;/// Sliding Window/// Time Complexity: O(len(p) + len(s))/// Space Complexity: O(1)class Solution {public:vector<int> findAnagrams(string s, string p) {vector<int> res;if(s.size() < p.size())return res;assert(p.size() > 0);vector<int> freq_p(26, 0);for(char c: p)freq_p[c - 'a'] += 1;vector<int> freq_s(26, 0);int l = 0, r = -1; // Sliding window: s[l, r]while(r + 1 < s.size()){r ++;freq_s[s[r] - 'a'] ++;if(r - l + 1 > p.size())freq_s[s[l++] - 'a'] --;if(r - l + 1 == p.size() && same(freq_s, freq_p))res.push_back(l);}return res;}private:bool same(const vector<int>& freq_s, const vector<int>& freq_p){for(int i = 0 ; i < 26; i ++)if(freq_s[i] != freq_p[i])return false;return true;}};void printVec(const vector<int>& vec){for(int e: vec)cout << e << " ";cout << endl;}int main() {string s1 = "cbaebabacd";string p1 = "abc";printVec(Solution().findAnagrams(s1, p1));// [0, 6]// ---string s2 = "abab";string p2 = "ab";printVec(Solution().findAnagrams(s2, p2));return 0;}