串联字串比较
30. 串联所有单词的子串
因为单词长度固定的,我们可以计算出截取字符串的单词个数是否和 words 里相等,所以我们可以借用哈希表。
一个是哈希表是 words,一个哈希表是截取的字符串,比较两个哈希是否相等!因为遍历和比较都是线性的,所以时间复杂度:O(n^2)O(n2)
class Solution { public: vector<int> findSubstring(string s, vector<string>& words) { vector<int> res; map<string, int> keyMapCount, keyMapCountTemp; //保持两个map int len = words[0].size(), totalLen = len * words.size(); for (auto it : words) keyMapCount[it]++; //记录string个数 for (int i = 0; i < s.size() - totalLen + 1; i++) { //每个pos为起点 遍历 int j = i; keyMapCountTemp = keyMapCount; for (; j < i + totalLen; j += len) { string temp = s.substr(j, len); if (keyMapCountTemp[temp] == 0) break; //匹配失败或超出 keyMapCountTemp[temp]--; //个数-- } if (j == i + totalLen) res.push_back(i); //验证符合 } return res; } };