标签:style blog color io 使用 ar strong for art
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).
思路:直接使用DFS即可,使用map记录单词出现的情况。
1 class Solution { 2 public: 3 vector<int> findSubstring( string S, vector<string> &L ) { 4 vector<int> indices; 5 if( L.empty() ) { return indices; } 6 wordMap.clear(); 7 for( auto iter = L.begin(); iter != L.end(); ++iter ) { ++wordMap[*iter]; } 8 int slen = S.length(), wlen = L[0].length(), size = slen-wlen*(int)L.size(); 9 for( int i = 0; i <= size; ++i ) { 10 if( SolveSub( i, S, wlen, (int)L.size() ) ) { indices.push_back( i ); } 11 } 12 return indices; 13 } 14 private: 15 bool SolveSub( int start, string &S, const int wlen, int cnt ) { 16 if( cnt == 0 ) { return true; } 17 bool ret = false; 18 auto iter = wordMap.find( S.substr(start, wlen) ); 19 if( iter != wordMap.end() && iter->second != 0 ) { 20 --iter->second; 21 ret = SolveSub( start+wlen, S, wlen, cnt-1 ); 22 ++iter->second; 23 } 24 return ret; 25 } 26 unordered_map<string,int> wordMap; 27 };
Substring with Concatenation of All Words
标签:style blog color io 使用 ar strong for art
原文地址:http://www.cnblogs.com/moderate-fish/p/3954652.html