LeetCode 76. 最小覆蓋子串 滑動窗口框架

雙指針的特殊應用:滑動窗口

代碼

題目鏈接:https://leetcode.cn/problems/minimum-window-substring/description/
不說廢話,直接貼代碼:

static string minWindow(string s, string t) {// need記錄需要匹配的字符串t中每個字符及出現的次數// window記錄s中維護的窗口中對應need字符出現的次數(記錄其他字符沒有用)unordered_map<char, int> need, window;for (char c: t) {need[c]++;}int left = 0, right = 0;// valid記錄window中已經滿足(個數)要求的字符個數,如果一個字符在window中出現的次數等于need,那么該值加1int valid = 0;// 記錄最小覆蓋字串的起始索引及長度int start = 0, len = INT32_MAX;while (right < s.size()) {// 把right位置的元素移入窗口,并擴大窗口char c = s[right];right++;// 如果當前新增的字符屬于需要的字符,對window的記錄進行更新if (need.count(c)) {window[c]++;// 如果更新后該字符的個數已經達到need要求,進行記錄if (window[c] == need[c]) {valid++;}}// 如果當前window中所有字符的個數都滿足了need要求,說明左窗口可以收縮,以尋找更短的符合長度while (valid == need.size()) {// 如果當前新的符合條件的window長度小于之前記錄的長度,就更新記錄if (right - left < len) {start = left;len = right - left;}char d = s[left];// 縮小窗口left++;if (need.count(d)) {if (window[d] == need[d]) {valid--;}window[d]--;}}}return len == INT32_MAX ? "" : s.substr(start, len);
}

解題框架

關鍵點:

對于滑動窗口window

  • 1.每次移入元素,都要考察
    (1)該元素是否是need中的
    (2)如果是,增加后它的個數是否滿足了need的要求
    如果所有元素的個數都滿足了need要求,說明可以收縮左邊界,以尋求更短的符合長度。
  • 2.每次移出元素,都要考察
    (1)該元素是否是need中的
    (2)如果是,減少后它的個數是否就不滿足need要求了
    2.1 如果移出元素后,窗口所有元素的個數不滿足need要求了,說明不需要收縮左邊界了,需要繼續向右擴張邊界以尋找新的元素用來滿足need要求。
    2.2 如果移出元素后,窗口所有元素的個數依然滿足need要求,說明還可以繼續收縮,一直收縮到不滿足為止。

框架

  解題框架:while(right<s.size())1.移入右側元素,擴大窗口2.對新移入的元素進行判斷(1)它是need中的嗎?如果是,對window中該元素的個數記錄進行更新(1.1)該元素的增加,是否導致它的個數滿足了need的要求?如果是,valid+13.如果window中所有元素的個數都滿足了need要求(valid==need.size()),說明可以對左邊界進行收縮,以尋求更短的符合長度3.1對【最短覆蓋子串】的起始位置和長度進行更新3.2移出左側元素,縮小窗口3.3對移出的元素進行判斷(1)它是need中的嗎?如果是(1.1)該元素的減少是否導致其個數不再符合need要求?(因為可能該字符的個數超過need要求,導致減少一個以后依然滿足)如果不再滿足,valid-1對window中該元素的個數記錄進行更新(window記錄需要先進行上一步的判斷,所以判斷完以后再更新)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208440.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

? Mac IDEA使用并運行項目

? IDEA導入項目并運行 Mac IDEA使用 (1) 倉庫導入 通過獲取giett倉庫包的url&#xff0c;在idea中導入項目 在gitee里獲取項目的ur打開idea&#xff0c;點擊 File->new->Project from Version Control (2) 創建數據庫ry并導入數據腳本 &#xff08;3&#xff09;修改配…

華為配置Smart Link主備備份示例

定義 Smart Link&#xff0c;又叫做備份鏈路。一個Smart Link由兩個接口組成&#xff0c;其中一個接口作為另一個的備份。Smart Link常用于雙上行組網&#xff0c;提供可靠高效的備份和快速的切換機制。 Monitor Link是一種接口聯動方案&#xff0c;它通過監控設備的上行接口…

npm私有源構建項目下載依賴報錯

Jenkins構建項目報錯&#xff0c;依賴找不到 Error: Couldnt find any versions for "babel/helper-module-imports" that matches "^7.22.15"at MessageError.ExtendableBuiltin (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/…

log4j(日志的配置)

日志一般配置在resources的config下面的&#xff0c;并且Util當中的initLogRecord中的initLog&#xff08;&#xff09;方法就是加載這個log4j.properties的. 首先先看log4j.properties的配置文件 log4j.rootLoggerdebug, stdout, Rlog4j.appender.stdoutorg.apache.log4j.Co…

高性能和多級高可用,云原生數據庫 GaiaDB 架構設計解析

1 云原生數據庫和 GaiaDB 目前&#xff0c;云原生數據庫已經被各行各業大規模投入到實際生產中&#xff0c;最終的目標都是「單機 分布式一體化」。但在演進路線上&#xff0c;當前主要有兩個略有不同的路徑。 一種是各大公有云廠商選擇的優先保證上云兼容性的路線。它基于存…

考研真題數據結構

【2021年山西大學真題】將二叉樹中所有非終端結點的左右子樹交換位置&#xff0c;可以得到原二叉樹的 鏡像二叉樹&#xff0c;如圖。假設二叉樹的存儲形式為&#xff08;lchild&#xff0c;data&#xff0c;rchild&#xff09;&#xff0c;給出求鏡像二叉樹的算法: &#xff0…

Sql Server Management Studio連接Mysql

目標 已知mysql連接參數&#xff08;地址和用戶&#xff09;&#xff0c;期望通過Microsoft Sql Server Management Studio &#xff08;以下簡稱MSSSMS&#xff09;連接Mysql&#xff0c;在MSSSMS中直接查詢或修改Mysql中的數據。 下載MySql Connector/ODBC并安裝&#xff0c…

使用poi-tl填充word模板,并轉化為pdf輸出

后端 依賴 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version> </dependency>Word版本 Word版本填充代碼 // 培訓詳情HashMap<String, Object> textMap new Ha…

maven環境搭建

maven歷史版本下載&#xff1a;https://archive.apache.org/dist/maven/ 新建系統變量編輯Path&#xff0c;添加bin目錄mvn -v測試查看版本號conf目錄下新建repository文件夾&#xff0c;作為本地倉庫 settings.xml <?xml version"1.0" encoding"UTF-8&…

2312d,d語言來綁定C++和rust

原文 各編譯語言相同概念 1,按可重用函數拆分代碼. 2,由源碼中的函數名生成的串來標識函數.如,g為void foo()生成_Z3foov的標識.此串總是是可重現的;如,Linux上的Clang和GCC都遵循ItaniumCABI約定來裝飾函數名. 3,在內存中的特定位置存儲該函數的所有參數,然后用調用或等效指…

gitee配置

注冊配置gitee Gitee官網 進入官網之后&#xff0c;有賬號直接登錄&#xff0c;沒有賬號注冊一個新的賬號 下載安裝git客戶端 官網地址 下載完成&#xff0c;一路直接點擊安裝直接安裝成功 檢查是否安裝成功 鼠標留在桌面–>右擊–>出現Git GUI Here/Git Bash Her…

windows系統nodeJs報錯node-sass npm ERR! command failed

報錯信息 npm WARN deprecated request2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated tar2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asa…

國科大通信原理復習

CH4-信源的數字化 26. 信源編碼的基本方法和分類 27. 無失真編碼和有失真編碼的區別 無失真編碼能夠完全一模一樣的恢復到原信號。 有失真編碼則不行。 28. 信息量和熵的定義 29. 離散信源的最大熵定理 n表示所有符號的種類&#xff0c;比如對于二進制碼字&#xff0c;Rbit對…

云計算ACP認證考試題庫0-100

0001.單選題:阿里云的云盾會檢查通過公共互聯網登錄云服務器ECS的來源IP,登錄方式包括SSH和遠程桌面,當來自某個IP的登錄請求出現多次密碼錯誤的情況時,會發出”ECS遭遇密碼暴力破解”的報警,當收到這個報警后,最安全的處理方法應該是。 A.通知自己業務平臺的所有用戶立即修改…

基于支持向量機SVM的新鮮度等級預測,基于自適應粒子群優化長短期神經網絡的新鮮度等級預測

目錄 背影 支持向量機SVM的詳細原理 SVM的定義 SVM理論 粒子群算法原理 SVM應用實例,基于支持向量機SVM的新鮮度等級預測,基于自適應粒子群優化長短期神經網絡的新鮮度等級預測 代碼 結果分析 展望 完整代碼:基于支持向量機SVM的新鮮度等級預測,基于自適應粒子群優化長短期…

SpringBoot+線程池實現高頻調用http接口并多線程解析json數據

場景 SpringbootFastJson實現解析第三方http接口json數據為實體類(時間格式化轉換、字段包含中文)&#xff1a; SpringbootFastJson實現解析第三方http接口json數據為實體類(時間格式化轉換、字段包含中文)-CSDN博客 Java中ExecutorService線程池的使用(Runnable和Callable多…

MindOpt APL:一款適合優化問題數學建模的編程語言

什么是建模語言 建模語言是一種描述信息或模型的編程語言&#xff0c;在運籌優化領域&#xff0c;一般是指代數建模語言。 比如要寫一個線性規劃問題的建模和求解&#xff0c;可以采用C、Python、Java等通用編程語言來實現計算機編程&#xff08;碼代碼&#xff09;&#xff0…

nodejs微信小程序+python+PHP的黃山旅游景點購票系統設計與實現-計算機畢業設計推薦

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 28 章:圣杯 = 專家 + ChatGPT 的協同作用

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 28 章&#xff1a;圣杯 專家 ChatGPT 的協同作用 ? 這就像是從 ChatGPT 或其他生成式人工智能中獲得高質量答案的圣杯。因為光知道怎么問&#xff08;提示工程技術&#xff09;還不夠&#xff0c;還要知…

harmonyOS開發技巧(二)——沉浸式以及狀態欄高

1. 設置沉浸式&#xff1a;win.setWindowLayoutFullScreen(true); 2. 獲取狀態欄的高&#xff1a;win.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM)以及win.on(avoidAreaChange, (data) > {})。 import UIAbility from ohos.app.ability.UIAbility; import wind…