串联字串比较

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;
  }
};

 

posted @ 2022-02-16 19:11  千寻slimg  阅读(46)  评论(0编辑  收藏  举报