Day 23 30. 串联所有单词的子串
30. 串联所有单词的子串
题目
1 | |
题目思路
- 困难题目,开局思考半小时,发现应该可以使用滑动窗口的解法;
- 具体思想是使用两个 unordered_map:up 记录 words 中所有单词及对应数量,ump 记录滑动窗口内 words 中出现的单词及对应数量;
- 遍历时每次增加一个单词的长度,按照 ws 去移动窗口,对于每一趟遍历,维持窗口 l = r;
- 若单词在 up 里不存在,重置窗口并清空 ump;
- 若单词在 up 里存在,则检查其出现次数是否超过 up 中的次数,若超过则需要增大左边界(右移 l)来缩小窗口;当 cnt 满足等于 ns 时,将 l 作为当前的答案插入。
题目代码
1 | |
复杂度
- 时间复杂度:整体复杂度为 O(ns * ws)
- 空间复杂度:O(ns * ws),可能有一些问题,有空再来思考
Day 23 30. 串联所有单词的子串
https://chaggle.github.io/2021/10/02/leetcode/91-day/day-23-30-substring-with-concatenation-of-all-words/