时间复杂度(O(k*n))
class Solution {
public:
vector<int> findSubstring(string s, vector<string>& words) {
vector<int> vec;
set<int> iset;
set<string> strSet;
if(s==""||words.empty())return vec;
int len = words.size()*(words[0].length());
for(int i=0;i<words.size();++i){
if(strSet.count(words[i])>0) continue;
strSet.insert(words[i]);
size_t site = s.find(words[i],0);
while(site!=-1){
string sub = s.substr(site,len);
if(sub.length()==len && isornot(words,sub,len)){
if(iset.count(site)<=0){
vec.push_back(site);
iset.insert(site);
}
}
site = s.find(words[i],site+1);
}
}
return vec;
}
bool isornot(vector<string> words,string str,int len){
int wordLen = words[0].length();
string ss(wordLen,'#');
for(int i=0;i<words.size();++i){
size_t site = str.find(words[i],0);
if(site>len)return false;
size_t site_bak = site;
while(site%wordLen!=0){
site_bak = site;
site = str.find(words[i],site+1);
if(site>len)return false;
}
str = str.replace(site,wordLen,ss);
}
for(int j=0;j<str.length();++j){
if(str.at(j)!='#')return false;
}
return true;
}
};