LeetCode-Substring with Concatenation of All Words
题目:
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; }