滑动窗口7:30. 串联所有单词的子串

链接: 30. 串联所有单词的子串 - 力扣(LeetCode)

滑动窗口基本解题思路:

  • 进窗口
  • 判断
  • 出窗口
  • 更新结果(该步骤顺序不固定,可能在进窗口时更新结果,也可能在判断成立时更新结果,也有可能在判断条件结束之后更新结果)
cpp 复制代码
class Solution {
public:
    vector<int> findSubstring(string s, vector<string>& words) {
        vector<int> ans;
        // 记录words中的单词
        unordered_map<string, int> wCount;
        for (auto& e : words) wCount[e] += 1;

        int len = words[0].size();
        int num = words.size();
        //判断
        if (len * num > s.size()) return ans;

        // 记录滑动窗口中的单词
        int n = s.size();
        
        for (int i = 0; i < len; i++)
        {
            unordered_map<string, int> sCount;
            for (int left = i, right = i, count = 0; right < n; right+=len)
            {
                //进窗口
                string word1 = s.substr(right, len);
                sCount[word1] += 1;
                count++;
                //判断
                if (count > num)
                {
                    //出窗口
                    string word2 = s.substr(left, len);
                    sCount[word2] -= 1;
                    if (sCount[word2] == 0) sCount.erase(word2);
                    left += len;
                    count--;
                }
                //更新结果
                if (sCount == wCount) ans.emplace_back(left);
            }
        }
        return ans;
    }
};
相关推荐
专注仿真6 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考7 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
好悬给我拽开线11 小时前
ZILOT 论文解析
算法
饮水桶_T12 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘5613 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi13 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者13 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet14 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞14 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
青少儿编程课堂16 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛