滑动窗口,这玩意解决一些字符串匹配的题目是真的挺好用的,虽然本质还是双指针。


思路:

1.维护一个窗口,不断的向右边移动
2.满足要求后,移动左边,当不满足时,跳出。
3.重复1,2.得出答案。

下面有两题leetcode题,一道困难一道中等,现在看来还挺简单的,23333

另外STL的unordered_map的count方法,是验证key值是否存在。

同时如果key值不存在,新加的key对应的值默认为零

438. 找到字符串中所有字母异位词

题目说明:

给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。

字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
unordered_map<char,int> need; //需要查找的字符串保存的次数
unordered_map<char,int> window; //需要维护的窗口。
int left=0,right=0;//左指针和右指针初始化为零
vector<int> res;//保存结果的
for(char c:p) need[c]++; //将需要匹配的字符串存入need中
int match=0; //判断是否满足,即是否包含
while(right<s.size())
{
char tmp1=s[right];
if(need.count(tmp1))
{
window[tmp1]++;
if(window[tmp1]==need[tmp1])
{
match++;
}
}
right++;
while(match==need.size()) //满足条件,left指针不断向右边,前进,直到不满足条件
{
if(right-left==p.size())
{
res.push_back(left);
} char tmp2=s[left];
if(need.count(tmp2))
{
window[tmp2]--;
if(window[tmp2]<need[tmp2])
{
match--;
}
}
left++;
}
}
return res;
}
};

76. 最小覆盖子串

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明: 如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案。
class Solution {
public:
string minWindow(string s, string t) {
unordered_map<char,int> need;
unordered_map<char,int> window;
int start=0,minlen=INT_MAX;
for(char c:t)
{
need[c]++;
}
int left=0,right=0;
int match=0;
while(right<s.size())
{
char tmp=s[right];
if(need.count(tmp))
{
window[tmp]++;
if(window[tmp]==need[tmp])
{
match++;
}
}
right++;
while(match==need.size())
{
if(right-left<minlen)
{
start=left;
minlen=right-left;
}
char w=s[left];
if(need.count(w))
{
window[w]--;
if(window[w]<need[w])
{
match--;
}
}
left++; }
}
return minlen==INT_MAX?"":s.substr(start,minlen); }
};

滑动窗口通用解leetcode字符串匹配问题的更多相关文章

  1. [转]TCP滑动窗口详解

    TCP滑动窗口详解  http://lyjdamzwf.blog.163.com/blog/static/75206837201193373226/ TCP滑动窗口(Sliding Window)   ...

  2. 滑动窗口经典题 leetcode 3. 无重复字符的最长子串

    题目 解题思路 题目要求找出给定字符串中不含有重复字符的最长子串的长度.这是一个典型的滑动窗口的题目,可以通过滑动窗口去解答. 滑动窗口 具体操作如下图示:找到一个子串 s[left...right] ...

  3. tcp滑动窗口详解(2)

    http://blog.csdn.net/yujun00/article/details/636495 ARQ与滑动窗口概念  滑动窗口协议,是TCP使用的一种流量控制方法.该协议允许发送方在停止并等 ...

  4. leetcode的Hot100系列--3. 无重复字符的最长子串--滑动窗口

    可以先想下这两个问题: 1.怎样使用滑动窗口? 2.如何快速的解决字符查重问题? 滑动窗口 可以想象一下有两个指针,一个叫begin,一个叫now 这两个指针就指定了当前正在比较无重复的字符串,当再往 ...

  5. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...

  6. LeetCode 第 3 题:无重复字符的最长子串(滑动窗口)

    LeetCode 第 3 题:无重复字符的最长子串 (滑动窗口) 方法:滑动窗口 滑动窗口模板问题:右指针先走,满足了一定条件以后,左指针向前走,直到不满足条件. 特点:左右指针的方向是一致的,并且是 ...

  7. LeetCode#3 - 无重复字符的最长字串(滑动窗口)

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: abcabcbb 输出的结果应该是3,最长的无重复的字串是'abc' 果然无论做什么都要静下心来啊!昨晚上卡了一个多小 ...

  8. [LeetCode]3. 无重复字符的最长子串(滑动窗口)

    题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...

  9. [LeetCode] Sliding Window Maximum 滑动窗口最大值

    Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...

随机推荐

  1. xxl-job使用遇到的问题

    1.背景 最近公司在迁移定时任务,以前老的定时任务是基于quartz搭建的分布式集群服务,遇到如下几个瓶颈问题: 同一个任务只能有一个节点运行,其他节点不执行,导致性能低,资源也浪费 定时任务在抢占执 ...

  2. [Django高级之中间件、csrf跨站请求伪造]

    [Django高级之中间件.csrf跨站请求伪造] Django中间件 什么是中间件? Middleware is a framework of hooks into Django's request ...

  3. GO语言的JSON03---JSON文件的序列化与反序列化

    package main import ( "encoding/json" "fmt" "os" ) type Human2 struct ...

  4. 【转载】NBU异机恢复oracle

    通过NBU将Oracle恢复到异机上... 2 1.1       备份任务检查: 2 1.2       数据库空间检查... 2 1.3       恢复服务器(testdb)软件安装:... 3 ...

  5. MCU,硅片,BOM

    MCU,硅片,BOM BOM(Bill of Material,物料清单),就是指一个东西的各个材料的的成本价格 BOM成本要控制,有三点要注意的. 一,是否有芯片替代料,在性能不降低的情况下,替代料 ...

  6. h264和h265多维度区别

    h264和h265多维度区别 1.  概述 h265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,很多朋友不知道h264和h265如何区别,下面让我们一起来了解一下 ...

  7. 旷视MegEngine核心技术升级

    旷视MegEngine核心技术升级 7 月 11 日,旷视研究院在 2020 WAIC · 开发者日「深度学习框架与技术生态论坛」上围绕 6 月底发布的天元深度学习框架(MegEngine)Beta ...

  8. 对端边缘云网络计算模式:透明计算、移动边缘计算、雾计算和Cloudlet

    对端边缘云网络计算模式:透明计算.移动边缘计算.雾计算和Cloudlet 概要 将数据发送到云端进行分析是过去几十年的一个突出趋势,推动了云计算成为主流计算范式.然而,物联网时代设备数量和数据流量的急 ...

  9. video视频标签自定义显示隐藏播放控件&Shadow DOM

    方法一:controlslist属性 controlslist="nodownload nofullscreen noremoteplayback" controlslist仅三种 ...

  10. CSS 常见问题笔记

    CSS 常见问题 布局 一.盒模型宽度计算 问题:div1 的 offsetWidth 是多少? <style> #div1 { width: 100px; padding: 10px; ...