You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening characters.
For example, given:
S: "barfoothefoobarman"
L: ["foo", "bar"]
You should return the indices: [0,9].
(order does not matter).
易错点:不要默认L中的词是不同的。
vector<int> findSubstring(string S, vector<string> &L) { C++
vector<int> result;
int size = L.size();
if(size ==0 || S.size() ==0)
return result;
int len = L[0].size();
if(S.size() < len*size)
return result;
map<string,int> myMap;
for(int i=0; i<L.size(); i++)
myMap[L[i]]++;
for(int i=0; i<=S.size()-len*size; i++){
map<string,int> tempmap;
int end = i+len*size;
for(int j=i; j<end; j = j+len){
string temp = S.substr(j,len);
if(myMap.count(temp) !=0)
tempmap[temp]++;
else
break;
}
if(tempmap.size() == myMap.size()){
bool isSame = true;
for(map<string,int>::iterator myMap_iter=myMap.begin(); myMap_iter!=myMap.end();myMap_iter++){
string key = myMap_iter->first ;
if(myMap[key]!=tempmap[key]){
isSame=false;
break;
}
}
if(isSame)
result.push_back(i);
}
}
return result;
}[leetcode] 30 Substring with Concatenation of All Words
原文:http://blog.csdn.net/chenlei0630/article/details/43151387