题目的意思就是 在s中寻找包含所有words中单词的子字符串的开始下标(不考虑words单词的顺序)
思路为
用一个map(string,int)来记录所有单词及其出现的次数
然后搜索所用s中所有可能出现的位置
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
int word_nums=words.size();
int word_size=words[0].size();
int ssize=s.size();
vector<int> ret;
map<string,int> word_count;//对 words中的单词统计每个单词出现的次数
map<string,int> temp_count;//对于每个可能的位置计数的临时变量
for(int i=0;i<word_nums;i++)
{
word_count[words[i]]++;
}
for(int i=0;i<ssize-word_nums*word_size+1;i++)
{
int j;
temp_count.clear();//清空word计数
for(j=0;j<word_nums;j++)
{
string word=s.substr(i+j*word_size,word_size);//找到起点为i的第j个单词
if(word_count.find(word)!=word_count.end())//word在 word_count中
{
temp_count[word]++;
if(temp_count[word]>word_count[word])//如果word出现的次数超过了word_count中word出现的次数
{
break;
}
}
else
{
break;
}
}
if(j==word_nums)//找到了所有的单词
{
ret.push_back(i);
}
}
return ret;
}
};