30. 串联所有单词的子串

 1 class Solution 
 2 {
 3 public:
 4     vector<int> findSubstring(string s, vector<string>& words) 
 5     {
 6         if(s.empty() || words.empty()) return {};
 7         int n = words.size(); // words有多少个单词
 8         int length = words.back().size();//words中每个单词的长度
 9         vector<int> res;
10         unordered_map<string,int> hash;
11         for(auto a : words) hash[a] ++;
12         if(s.size() < n * length) return res;
13         for(int i = 0;i <= s.size() - n * length;i ++)
14         {
15             unordered_map<string,int> temp;
16             int size = n;
17             int start = i;
18             string str = s.substr(start,length);
19             while(hash.count(str) && size)
20             {
21                 temp[str] ++;
22                 size --;
23                 start += length;
24                 str = s.substr(start,length);
25             }
26             if(temp == hash) res.push_back(i);
27         }
28         return res;
29     }
30 };

 

你可能感兴趣的:(30. 串联所有单词的子串)