1、题目描述
2、题目分析
直接使用 哈希表记录子串的信息,然后对比两个哈希表信息即可
3、代码
1 vector<int> findAnagrams(string s, string p) { 2 3 vector<int> b; 4 if( s.size() < p.size() ) 5 return b; 6 7 vector<int> ans; 8 map<char,int> m; 9 for(auto c: p){ 10 m[c]++; 11 } 12 13 map<char,int> sm; 14 for(int i = 0; i < s.size() - p.size()+1; ++i){ 15 16 string sb = s.substr(i,p.size()); 17 if( i == 0){ 18 for( auto c : sb){ 19 sm[c]++; 20 } 21 }else{ 22 if( sm[s[i-1]] <= 1){ 23 sm.erase(s[i-1]); 24 }else{ 25 sm[s[i-1]]--; 26 } 27 28 sm[s[i+p.size()-1]]++; 29 } 30 31 32 bool m1 = true , m2 = true ; 33 for(map<char,int>::iterator it = sm.begin(); it != sm.end() ; it++){ 34 if( m.find(it->first) == m.end() || m[ it->first] != it->second ){ 35 m1 = false; 36 break; 37 } 38 39 } 40 41 if( m1 == true ){ 42 for(map<char,int>::iterator it = m.begin() ; it != m.end() ; ++it){ 43 if( sm.find(it->first) == sm.end() || sm[it->first] != it->second){ 44 m2 = false; 45 break; 46 } 47 } 48 } 49 50 51 if( m1 == true && m2 == true) 52 ans.push_back(i); 53 54 } 55 56 57 return ans; 58 59 }