力扣刷题之旅:进阶篇(四)—— 滑动窗口问题

news2024/11/17 20:25:09

   力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。  

--点击进入刷题地址


引言: 

        在编程的世界里,滑动窗口问题是一种常见且具有挑战性的问题类型。在力扣(LeetCode)上,这类问题往往以其独特的思维方式和高难度的解法吸引着众多算法爱好者。今天,我们就来一起探讨一道滑动窗口的经典题目:“最小覆盖子串”。

题目描述

       -- 给定一个字符串 S 和一个字符串 T,找出 S 中最短的子串,使得 T 是 S 的子序列。如果 S 中不存在这样的子串,就返回一个空字符串。

示例

输入:

S = "ADOBECODEBANC"
T = "ABC"


输出:

"BANC"

解题思路

  •         这道题目的关键在于理解子序列和子串的区别。子序列是指从原序列中删除一些元素(也可以不删除)后得到的序列,而子串则是指原序列中连续的一段。因此,我们需要找到一个尽可能短的子串,使得这个子串包含了 T 中的所有字符。
  •         为了解决这个问题,我们可以使用滑动窗口的思想。首先,我们使用双指针来定义一个窗口,这个窗口包含了 T 中的所有字符。然后,我们尝试缩小这个窗口的大小,直到无法再缩小为止。最后,我们就得到了一个包含 T 的最短子串。
  •         具体实现时,我们可以使用哈希表来记录 T 中每个字符的出现次数。然后,我们遍历 S,用一个变量来记录当前窗口中已经包含了 T 中的多少个字符。当这个变量等于 T 的长度时,说明我们已经找到了一个包含 T 的子串。此时,我们可以尝试缩小窗口的大小,直到无法再缩小为止。

代码实现

def minWindow(s: str, t: str) -> str:  
    if not s or not t or len(s) < len(t):  
        return ""  
      
    # 记录 t 中每个字符的出现次数  
    target_count = {}  
    for char in t:  
        target_count[char] = target_count.get(char, 0) + 1  
      
    # 使用滑动窗口来查找最短子串  
    left, right = 0, 0  # 窗口的左右指针  
    formed = 0  # 记录当前窗口中已经包含了 t 中的多少个字符  
    min_len = float('inf')  # 最小子串的长度  
    min_left = min_right = 0  # 最小子串的左右指针  
      
    while right < len(s):  
        char = s[right]  
        right += 1  
          
        # 如果当前字符在 t 中出现过,则增加 formed 的计数  
        if char in target_count:  
            formed += 1  
              
        # 当 formed 的计数等于 t 的长度时,说明已经找到了一个包含 t 的子串  
        while formed == len(t):  
            # 更新最小子串的长度和左右指针  
            if right - left < min_len:  
                min_len = right - left  
                min_left = left  
                min_right = right  
              
            char = s[left]  
            left += 1  
              
            # 如果当前字符在 t 中出现过,则减少 formed 的计数  
            if char in target_count:  
                formed -= 1  
      
    return s[min_left:min_right] if min_len != float('inf') else ""

总结

        滑动窗口问题是算法学习中的一个重要部分,它考验着我们的思维能力和编程技巧。通过这道题目的练习,我们可以更加深入地理解滑动窗口的思想,掌握其在实际问题中的应用。同时,我们也应该注意到,滑动窗口问题往往有多种解法,我们应该多尝试不同的方法,以便更好地提高自己的算法水平。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1443084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 自我检测题--part 1

1. Which way among them is used to create an event loop ? Window.mainloop() 2. Suppose we have a set a {10,9,8,7}, and we execute a.remove(14) what will happen ? Key error is raised. The remove() method removes the specified element from the set. Th…

Python算法题集_两两交换链表中的节点

Python算法题集_两两交换链表中的节点 题24&#xff1a;两两交换链表中的节点1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【四节点法】2) 改进版一【列表操作】3) 改进版二【三指针法】4) 改进版三【递归大法】 4. 最优算法 本文为Python算法…

幻兽帕鲁服务器怎么更新?进入游戏显示:加入的比赛正在运行不兼容的版本,请尝试升级游戏版本(阿里云)

幻兽帕鲁服务器怎么更新&#xff1f;进入游戏显示&#xff1a;加入的比赛正在运行不兼容的版本&#xff0c;请尝试升级游戏版本。这是因为游戏客户端或者服务器上的游戏服务端&#xff0c;没有更新版本。导致两个版本不一致&#xff0c;所以无法进入游戏。 最近幻兽帕鲁 官方客…

Git 消除对某个文件的追踪

参考&#xff1a; &#xff08;尚未验证他的该方法&#xff09; https://www.golinuxcloud.com/git-remove-file-from-tracking/https://www.golinuxcloud.com/git-remove-file-from-tracking/

第9讲 详解第 2 套真题

第9讲 详解第 2 套真题 基本编程题【15 分】简单应用题【25 分】综合应用题【20 分】问题 1【10 分】:问题 2【10 分】:各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! 基本编程题【15 分】 考生文件夹下存在一个文件 PY101.py,请写代码替换横线,不…

蓝桥杯官网练习题(翻转)

问题描述 小蓝用黑白棋的 n 个棋子排成了一行&#xff0c;他在脑海里想象出了一个长度为 n 的 01 串 T&#xff0c;他发现如果把黑棋当做 1&#xff0c;白棋当做 0&#xff0c;这一行棋子也是一个长度为 n 的 01 串 S。 小蓝决定&#xff0c;如果在 S 中发现一个棋子…

AB测试最小样本量

1.AB实验过程 常见的AB实验过程&#xff0c;分流-->实验-->数据分析-->决策&#xff1a;分流&#xff1a;用户被随机均匀的分为不同的组实验&#xff1a;同一组内的用户在实验期间使用相同的策略&#xff0c;不同组的用户使用相同或不同的策略。数据收集&#xff1a;…

【技巧】PCB布局技巧:带条纹的电容

这些都是无极性电容&#xff0c;所以这个条纹不是极性标记。一位读者得回答正确&#xff0c;它代表电容卷绕时&#xff0c;卷绕在外层的那一极。我发现现在很少有工程师知道电容一端的条纹代表什么&#xff0c;也不知道条纹端和不带条纹端互换带来的不同效果。即使你从来不使用…

fast.ai 深度学习笔记(二)

深度学习 2&#xff1a;第 1 部分第 4 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-4-2048a26d58aa 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

Adaptec RAID 控制器arcconf 管理命令的常见的查询操作

ARCCONF命令行工具可以在服务器正常运行过程中对Adaptec RAID卡进行带内在线查询配置操作&#xff0c;无需重启服务器&#xff0c;十分方便快捷&#xff0c;本文讲解常见的查询操作。 一、查询流程 二、常见指令 1、查询已安装的RAID卡清单 [rootlocalhost ~]# ./arcconf-lin…

STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍

文章目录 1. 介绍FSMC2. FSMC特点3. Block示意图4. AHB接口4.1 Supported memories and transactionsGeneral transaction rulesConfiguration registers 5. 外部设备地址映射5.1 NOR/PSRAM地址映射将NOR Flash/PSRAM的支持进行封装 5.2 NAND/PC Card地址映射 1. 介绍FSMC 说到…

阿里云服务器4核8g的购买价格

阿里云服务器4核8g配置多少钱一年&#xff1f;1个月费用多少&#xff1f;云服务器u1实例3折优惠价955.58元一年&#xff0c;计算型c7云服务器4核8G价格2944.79元一年。4核8G服务器按月购买比较贵&#xff0c;经济型e实例4核8G配置1个月216元&#xff0c;通用算力型u1服务器336.…

vs用msys2编译安装 gmp

1 下载 1.1下载MSYS2工具 MSYS2 1.2 下载gmp The GNU MP Bignum Library 2 使用windows的msys2命令窗口,有三个msys2命名窗口 mingw64 3 4 命令 pacman -Syu 重启&#xff1a; pacman -Su 安装&#xff1a; pacman -S mingw-w64-x86_64-gcc pacman -S mingw-w64-x86_64-make…

2024.2.10 DMS(数据库管理系统)初体验

数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件&#xff0c;用于建立、使用和维护数据库&#xff0c;简称DBMS。它对数据库进行统一的管理和控制&#xff0c;以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据&#xff0c;数据库管…

问题:超声波纵波斜入射时,当入射角大于第一临界角小于第二临界角时,在第二介质内只有折射横波。 #微信#经验分享#其他

问题&#xff1a;超声波纵波斜入射时&#xff0c;当入射角大于第一临界角小于第二临界角时&#xff0c;在第二介质内只有折射横波。 参考答案如图所示

大学答案在哪搜?分享3个软件和公众号,来对比看看吧! #其他#其他#知识分享

在快节奏的大学生活中&#xff0c;合理利用这些日常学习工具&#xff0c;能够让你事半功倍&#xff0c;提高学习效率。 1.知乎 一个问答网站 虽然不是专门的搜题软件&#xff0c;但是其中有很多高手和专家&#xff0c;可以在问题中提问&#xff0c;获得专业回答。 2.试题猪 …

《CSS 简易速速上手小册》第3章:CSS 响应式设计(2024 最新版)

文章目录 3.1 媒体查询基础&#xff1a;网页的智能眼镜3.1.1 基础知识3.1.2 重点案例&#xff1a;适应三种设备的响应式布局3.1.3 拓展案例 1&#xff1a;改变字体大小3.1.4 拓展案例 2&#xff1a;暗模式适配 3.2 响应式图片和视频&#xff1a;让内容自由呼吸3.2.1 基础知识3.…

STM32标准库驱动W25Q64模块读写字库数据+OLED0.96显示例程

STM32标准库驱动W25Q64 模块读写字库数据OLED0.96显示例程 &#x1f3ac;原创作者对W25Q64保存汉字字库演示&#xff1a; W25Q64保存汉字字库 &#x1f39e;测试字体显示效果&#xff1a; &#x1f4d1;功能实现说明 利用W25Q64保存汉字字库&#xff0c;OLED显示汉字的时候&…

flutter使用qr_code_scanner扫描二维码

qr_code_scanner仓库地址&#xff1a;qr_code_scanner | Flutter Package 需要添加android和ios的相机权限和本地相册权限&#xff1a; android中添加权限: 在android\app\build.gradle中修改&#xff1a;minSdkVersion 20 并且在android/app/src/main/AndroidManifest.xml中…

机器学习系列——(十二)线性回归

导言 在机器学习领域&#xff0c;线性回归是最基础且重要的算法之一。它用于建立输入特征与输出目标之间的线性关系模型&#xff0c;为我们解决回归问题提供了有效的工具。本文将详细介绍线性回归的原理、应用和实现方法&#xff0c;帮助读者快速了解和上手这一强大的机器学习…