滑动窗口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;
    }
};
相关推荐
灵感__idea12 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP1 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
NAGNIP2 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试