描述
给出一个字符串S和一组单词L,L中单词的长度都相等,找出S中的符合以下要求的子串在S中的起始位置索引:子串为L中所有单词串联在一起(单词的顺序随意),L中的每个单词只出现一次,中间不能有其他的字符。
例如:给定S="nowcoderacodnowert",L为["now", "cod"],
返回的索引应该是[0,9].(不用关心给出索引的顺序)
class Solution {
vector<int> d;
public:
vector<int> findSubstring(string S, vector<string> &L) {
int i,j,N,len,q;
string k;
if(L.size()==0) return d;
N=S.length();
len=L[0].size();
map<string,int> book,has;
for(i=0;i<L.size();i++)
{
if(book.count(L[i])==0) book[L[i]]=0;
book[L[i]]++;
}
for(i=0;i<N-L.size()*L[0].size()+1;i++)
{
j=i;
has.clear();
for(q=0;q<L.size();q++,j+=len)
{
k=S.substr(j,len);
if(book.count(k)==0) break;
if(has.count(k)==0) has[k]=0;
has[k]++;
if(has[k]>book[k]) break;
}
if(q==L.size()) d.push_back(i);
}
return d;
}
};