当前位置: 首页 > news >正文

经典滑动窗口试题(二)

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、水果成篮
    • 1、题目讲解
    • 2、讲解算法思路
    • 3、代码实现
  • 二、找到字符串中所有字母异位词
    • 1、题目讲解
    • 2、讲解算法思路
    • 3、代码实现
  • 三、串联所有单词的子串
    • 1、题目讲解
    • 2、讲解算法思路
    • 3、代码实现
  • 四、最小覆盖子串
    • 1、题目讲解
    • 2、讲解算法思路
    • 3、代码实现


一、水果成篮

1、题目讲解

在这里插入图片描述
在这里插入图片描述

2、讲解算法思路

在这里插入图片描述

3、代码实现

class Solution {
public:int totalFruit(vector<int>& f) {int n=f.size();unordered_map<int,int> hash;int ret=0;for(int left=0,right=0;right<n;right++){hash[f[right]]++;while(hash.size()>2){hash[f[left]]--;if(hash[f[left]]==0){hash.erase(f[left]);}left++;}ret=max(ret,right-left+1);}return ret;}};

二、找到字符串中所有字母异位词

1、题目讲解

在这里插入图片描述

2、讲解算法思路

在这里插入图片描述

3、代码实现

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int hash1[256]={0},len=p.size();for(char ch:p) hash1[ch]++;int hash2[256]={0};for(int left=0,right=0,count=0;right<s.size();right++){char in=s[right];hash2[in]++;if(hash2[in]<=hash1[in]) count++;if(right-left+1>len){char out=s[left];if(hash2[out]<=hash1[out]) count--;hash2[out]--;left++;}if(count==len){ret.push_back(left);}}return ret;      }
};

三、串联所有单词的子串

1、题目讲解

在这里插入图片描述
在这里插入图片描述

2、讲解算法思路

在这里插入图片描述

3、代码实现

class Solution {
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<string,int> hash1;for(auto ch:words){hash1[ch]++;}int len=words[0].size(),m=words.size();for(int i=0;i<len;i++){unordered_map<string,int> hash2;for(int left=i,right=i,count=0;right+len<=s.size();right+=len){string in=s.substr(right,len);hash2[in]++;if(hash1.count(in) && hash2[in]<=hash1[in]) count++;if(right-left+1>len*m){string out=s.substr(left,len);if(hash1.count(out) && hash2[out]<=hash1[out]) count--;hash2[out]--;left+=len;}if(count==m) ret.push_back(left);}}return ret;}
};

四、最小覆盖子串

1、题目讲解

在这里插入图片描述

2、讲解算法思路

在这里插入图片描述

3、代码实现

代码一

class Solution {
public:string minWindow(string s, string t) {int hash1[256]={0};int kinds=0;for(auto ch:t){if(hash1[ch]==0) kinds++;hash1[ch]++;}int hash2[256]={0};int minlen=INT_MAX,begin=-1;for(int left=0,right=0,count=0;right<s.size();right++){char in=s[right];hash2[in]++;if(hash2[in]==hash1[in])  count++;while(count==kinds){if(right-left+1<minlen){minlen=right-left+1;begin=left;}char out=s[left++];if(hash2[out]--==hash1[out])  count--;    } }if(begin==-1) return "";else return s.substr(begin,minlen);}
};

代码二 不使用kinds来计算种类

class Solution {
public:string minWindow(string s, string t) {int hash1[256]={0},n=t.size();for(char ch:t){hash1[ch]++;}int begin=-1,len=INT_MAX;int hash2[256]={0};for(int left=0,right=0,count=0;right<s.size();right++){char in=s[right];hash2[in]++;if(hash2[in]<=hash1[in]) count++;while(count==n){if(right-left+1<len){begin=left;len=right-left+1;}char out=s[left];if(hash2[out]<=hash1[out]) count--;hash2[out]--;left++;}}if(begin==-1) return "";else return  s.substr(begin,len);}};

http://www.lryc.cn/news/246925.html

相关文章:

  • easyexcel指定sheet页动态给行列加背景色
  • 设计模式在实际业务中应用 - 模版方法
  • BGP综合实验
  • Global Surface Summary of the Day 全球逐日气象站点数据 GSOD数据集
  • Harmony OS4开发入门
  • .net core 事务
  • 【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
  • MPPT工作流程及算法和硬件的选择
  • C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)
  • 每日一练【移动零】
  • QT修改windowTitle的名字以及图片
  • C语言-指针讲解(3)
  • 慢 SQL 分析及优化
  • PTA:计算m到n之间所有素数的和
  • Golang实现YOLO:高性能目标检测算法
  • 文档 + 模型
  • 计算机毕业设计php+bootstrap小区物业管理系统
  • Osg线程模型(选择不当,会引发崩溃)
  • 2161根据数字划分数组
  • Oracle Linux 9.3 发布
  • XML Schema中的simpleContent 元素
  • 线性分类器--分类模型
  • 【开源】基于Vue和SpringBoot的企业项目合同信息系统
  • 指针数组用指针变量模拟二维数组
  • 接口文档自动生成工具:详细教程和实用技巧
  • C语言--不创建第三个变量,实现对两个数字的交换
  • Java中的mysql——面试题+答案(数据库连接池,批处理操作)——第22期
  • 商用车的智慧眼车规级激光雷达
  • 【NI-RIO入门】为CompactRIO供电
  • 【数据结构/C++】栈和队列_链队列