1class Solution {2public:3vector<int> findSubstring(string s, vector<string> &words) {4int n = words[0].length();5int slen = s.length();6int len = slen - n * words.size();7vector<int> ans;8if (len < 0) return ans;9string t;10unordered_map<string, int> mp;11for (auto i = 0; i < words.size(); ++i) ++mp[words[i]];1213for (int i = 0; i <= len; ++i) {14t = s.substr(i, n);15if (mp.find(t) != mp.end()) {16unordered_map<string, int> smp;17++smp[t];18int flag = 1;19for (int j = i + n, k = 1; k < words.size() && j + n <= slen; ++k, j = j + n) {20t = s.substr(j, n);21if (mp.find(t) != mp.end())22++smp[t];23else {24flag = 0;25break;26}27}28if (flag && smp == mp) ans.push_back(i);29}30}3132return ans;33}34};