滑动窗口+哈希,这道题中words中字符串的大小长度都是一样的,还好做一些。
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
vector<int> ans;
int size = words.size();
int ln = words[0].size();
int window = ln * size;
int s_len = s.length();
unordered_map<string, int> _map;
for(string& item : words) _map[item]++;
int i = window - 1;
while(i < s_len){
string item = s.substr(i - window + 1, window);
//这里可以优化,可以优化成二维数组
unordered_map<string, int> map = _map;
string sub;
i++;
int j = 0;
while(true){
if(j >= size) break;
sub = item.substr(j * ln, ln);
map[sub]--;
if(map[sub] < 0) break;
j++;
}
if(j >= size){
ans.push_back(i - window);
}
}
return ans;
}
};