本题源自leetcode 30
--------------------------------------------------------------------------------
思路: 用两个map做映射、。
1 先把字典中的单词做一个map映射。
2 遍历字符串。每次都截取字典中单词长度的子串,如果在字典中出现,接着向后遍历,直到在字典中的所有单词都出现。否则就从下一个位置接着截取。
代码:
vector<int> findSubstring(string s, vector<string>& words) {
int m = s.size();
int n = words.size();
int len = words[0].size();
vector<int> res;
if(m == 0 || n ==0)
return res;
unordered_map<string,int> dict;
for(string str : words)
dict[str]++;
for(int i = 0; i < m - n*len + 1; i++){
unordered_map<string,int> mp;
int j = 0;
for(; j < n; j++){
string str = s.substr(i + j * len,len);
if(dict.count(str)){
mp[str]++;
if(mp[str] > dict[str])
break;
}
else //不在字典中就跳出循环
break;
}
if(j == n)
res.push_back(i);
}
return res;
}