给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。
注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words)
{
vector<int> result;
if(s.size()==0||words.size()==0)
return result;
int leng=words.size()*words[0].size();
map<string,int> tmp;
for(auto word:words)
{
tmp[word]++;
}
string res;
for(int i=0;i<=(int)s.size()-leng;i++)
{
res=s.substr(i,leng);
map<string,int> tmp1;
int n=words[0].size();
for(int j=0;j<leng;j+=n)
{
string s=res.substr(j,n);
tmp1[s]++;
if(tmp[s]!=0)
{
if(tmp1[s]>tmp[s])
break;
}
else
break;
if(j+n>=leng)
result.push_back(i);
}
}
return result;
}
};