1 #include<iostream>
2 #include<vector>
3 #include<string>
4 #include<unordered_map>
5 using namespace std;
6 class Solution {
7 public:
8 vector<int> findSubstring(string s, vector<string>& words) {
9 vector<int> result;
10 int len = words[0].size();
11 int wordsize = len * words.size();
12 int superposition = 0;
13 while (wordsize <= s.size()) {
14 unordered_map<string, int> mp, tmp;
15 for (auto str : words) {
16 ++mp[str];
17 }
18 for (int i = 0; i < wordsize;) {
19 string &&str = s.substr(i, len);
20 if (mp.find(str) == mp.end()) break;
21 ++tmp[str];
22 i = i + len;
23 }
24 if (tmp == mp) result.push_back(superposition);
25 tmp.clear();
26 s=s.substr(1, s.size() - 1);
27 superposition = superposition + 1;
28 }
29 return result;
30 }
31 };
32 int main() {
33 string s = "wordgoodgoodgoodbestword";
34 vector<string> words = { "word","good","best","good" };
35 Solution sol;
36 vector<int> result=sol.findSubstring(s,words);
37 for (int i = 0; i < result.size(); i++) {
38 cout << result[i] << endl;
39 }
40 }