您的位置:首页 > 其它

LeetCode-Substring with Concatenation of All Words

2014-10-21 22:49 363 查看
题目:

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]
.

源码:

用两个map,其中一个map用来保存L中每个word出现的次数。然后遍历S字符串,通过比较word_counts中的单词出现的次数.若超过或不出现则break.

vector<int> findSubstring(string S,vector<string> &L){
int size=L.size();
if(size<=0) return vector<int>();

map<string,int> word_counts;
for(int i=0;i<size;i++){
word_counts[L[i]]++;
}

int word_size=L[0].size();
map<string,int> counting;
vector<int> result;

for(int i=0;i<=((int)S.length()-size*word_size);i++){
counting.clear();

for(int j=0;j<size;j++){
string word=S.substr(i+j*word_size,word_size);

if(word_counts.find(word)!=word_counts.end()){
counting[word]++;

if(counting[word]>word_counts[word]) break;
}

}

if(j==size) result,push_back(i);
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: