class Solution {
public:
vector<int> findSubstring(string S, vector<string> &L) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
map<string,int> mapL;
for(int i=0;i<L.size();i++)
{
mapL[L[i]]++;
}
vector<int> pos;
if(L.size()<=0) return pos;
int len=L[0].length();
if(len<=0) return pos;
int right=S.length()-len*L.size();
for(int i=0;i<=right;i++)
{
map<string,int> mapL2;
int k=0;
for(int j=i;j<S.length();j+=len)
{
string substr=S.substr(j,len);
mapL2[substr]++;
if(mapL2[substr]>mapL[substr])
{
break;
}
k++;
}
if(k==L.size()) pos.push_back(i);
}
return pos;
}
};
果然hash是很强大的工具!
先遍历一遍L,建立L中元素个数的hash表。
再遍历S,查找每个字符串是否在L的hash表中存在。