leetcode 76 最小覆蓋子串

一、題目描述

二、解題思路

整體思路:

模擬尋找最小覆蓋子集的過程,由于可借助同向雙指針且可以做到指針不回退,所以可以用滑動窗口的思想來解決這個問題。

具體思路:

(1)數組hash1用于統計t中每一個字符出現的頻次,變量kinds用于統計有效字符的種類,例如t為“aabc”,則kinds為3;

(2)數組hash2用于統計窗口內每一個字符的頻次;

(3)滑動窗口要素:

<1>進窗口:進入hash1,進之后維護count

?//進窗口

?char in=s[right];

?if(hash1[in]==++hash2[in]) count++;

<2>判斷:窗口內的字符串為覆蓋子集

?while(count==kinds)

<3>更新:更新len和start

//更新

if(right-left+1<len){

? ? ? ? len=right-left+1;

? ? ? ? start=left;

}

<4>出窗口:出hash1,出之前維護count

//出窗口

char out=s[left++];

if(hash2[out]--==hash1[out]) count--;

(4)如果未找到合法的覆蓋子集,就返回空字符串。如果找到了最小覆蓋子串,就返回這個最小的覆蓋子串。

三、代碼實現

class Solution {
public:string minWindow(string s, string t) {int hash1[128]={0};//統計t中每一個字符的頻次int kinds=0;//統計有效字符的種類for(auto c:t) if(hash1[c]++==0) kinds++;int hash2[128]={0};//統計窗口內每一個字符的頻次//滑動窗口int start,len=INT_MAX;for(int left=0,right=0,count=0;right<s.size();right++){//進窗口char in=s[right];if(hash1[in]==++hash2[in]) count++;//判斷while(count==kinds){//更新if(right-left+1<len){len=right-left+1;start=left;}//出窗口char out=s[left++];if(hash2[out]--==hash1[out]) count--;}}return len==INT_MAX?"":s.substr(start,len);}
};

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

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

相關文章

阿里云ECS服務器的公網IP地址

文章目錄環境背景查詢公網IP地址阿里云控制臺阿里云客戶端工具&#xff08;圖形界面&#xff09;阿里云CLI工具&#xff08;命令行&#xff09;其它方法元數據服務器ipinfo.io參考注&#xff1a;本文介紹了如何獲取阿里云ECS服務器的公網IP地址&#xff0c;可以順便了解一下和阿…

IPSec 與 IKE 核心知識點總結

一、IPSec 安全基礎IPSec 是保障 IP 數據傳輸安全的核心協議&#xff0c;其核心圍繞密鑰管理和安全策略約定展開&#xff0c;具體包括以下關鍵內容&#xff1a;1. 對稱密鑰的作用與要求對稱密鑰是 IPSec 實現加密、驗證的基礎&#xff0c;主要用于三個場景&#xff1a;加密 / 解…

C2ComponentStore

1. C2ComponentStore這是 Codec 2.0 HAL 的抽象接口&#xff08;frameworks/av/media/codec2/core/include/C2ComponentStore.h&#xff09;。代表一個「組件工廠」&#xff0c;負責&#xff1a;枚舉當前可用的 Codec2 組件&#xff08;解碼器、編碼器&#xff09;。創建組件&a…

AI 在醫療領域的應用與挑戰

引言介紹 AI 技術迅猛發展的大背景&#xff0c;引出其在醫療領域的重要應用。闡述研究 AI 醫療應用及挑戰對推動醫療行業進步的重要意義。AI 在醫療領域的應用現狀疾病診斷輔助&#xff1a;描述 AI 影像識別技術在識別 X 光、CT、MRI 影像中疾病特征的應用&#xff0c;如對肺癌…

【GPT入門】第51課 Conda環境遷移教程:將xxzh環境從默認路徑遷移到指定目錄

【GPT入門】第51課 Conda環境遷移教程&#xff1a;將xxzh環境從默認路徑遷移到指定目錄步驟1&#xff1a;創建目標目錄&#xff08;若不存在&#xff09;步驟2&#xff1a;克隆環境到新路徑步驟3&#xff1a;驗證新環境可用性步驟4&#xff1a;刪除舊環境&#xff08;可選&…

應急響應-模擬服務器掛馬后的應急相關操作

工具&#xff1a;攻擊機&#xff1a; kail:192.168.108.131 kail下載地址&#xff1a;https://mirrors.aliyun.com/kali-images/kali-2021.3/kali-linux-2021.3-live-i386.iso靶機&#xff1a;windows 7: 192.168.108.1321、在kali中制作木馬文件&#xff1a;vhost.exe&#xf…

記一次 .NET 某光譜檢測軟件 內存暴漲分析

一&#xff1a;背景 1. 講故事 訓練營里的一位學員找到我&#xff0c;說他們的系統會出現內存暴漲的情況&#xff0c;看了下也不是托管堆的問題&#xff0c;讓我協助一下到底怎么回事&#xff1f;既然有dump了&#xff0c;那就開始分析之旅吧。 二&#xff1a;內存暴漲分析 1. …

基于OpenCV的物體識別與計數

在計算機視覺領域&#xff0c;利用圖像處理技術進行物體識別和計數是一項基礎且重要的任務。本文將介紹一種使用OpenCV庫實現的高效物體識別與計數方法&#xff0c;并提供一些代碼片段以幫助理解各個步驟。 這是前幾年做過傳統圖像處理計數的項目&#xff0c;通過傳統圖像處理之…

算法題打卡力扣第34題:在排序數組中查找元素的第一個和最后一個位置(mid)

題目描述提示&#xff1a; 0 < nums.length < 105 -109 < nums[i] < 109 nums 是一個非遞減數組 -109 < target < 109 解題思路一 暴力解 頭到尾遍歷整個數組。 用一個變量 first 記錄第一次遇到 target 的索引。 繼續遍歷&#xff0c;用另一個變量 last 不斷…

虛幻基礎:曲線

能幫到你的話&#xff0c;就給個贊吧 &#x1f618; 文章目錄曲線&#xff1a;數值變化的曲線動畫曲線動畫曲線get curve value只有curve所在動畫被播放才返回曲線數值沒播放時 返回0一個曲線可以在多個動畫中使用 且可以設置曲線的不同值曲線&#xff1a;數值變化的曲線 動畫…

MFC隨筆—不使用對話框資源模板創建對話框

在MFC程序中使用對話框時一般都是首先在資源模版里創建對話框資源,然后DoModal()或者Create顯示出模式對話框或者非模式對話框。然而采用該方式創建出的對話框移植性差,從一個工程移動到另一個工程比較麻煩。 在MFC中還有另一種創建對話框的方法,即利用DLGTEMPLATE、DLGITEM…

第八十六章:實戰篇:文本生成腳本 → TTS + 鏡頭 → 視頻整合——讓你的文字“動聽”又“好看”!

AI導演鏈路前言&#xff1a;AI的“智能制片人”——文本 → 視頻&#xff0c;你的想法“一鍵出片”&#xff01;第一章&#xff1a;痛點直擊——傳統視頻制作&#xff0c;累到“吐血”&#xff01;第二章&#xff1a;探秘“智能制片廠”&#xff1a;流水線上的四大核心模塊&…

Linux內核源碼詳解--缺頁異常(Page Fault)處理的核心函數handle_pte_fault

handle_pte_fault 是 Linux 內核中處理缺頁異常&#xff08;Page Fault&#xff09;的核心函數&#xff0c;負責根據頁表項&#xff08;PTE&#xff09;的狀態和訪問權限&#xff0c;分發到不同的子處理邏輯&#xff08;如匿名頁映射、文件頁映射、寫時復制、NUMA 遷移等&#…

基于混合注意力網絡和深度信念網絡的魯棒視頻水印技術基礎理論深度解析

1. 引言隨著數字媒體技術的迅猛發展和互聯網的普及&#xff0c;視頻內容的創作、傳播和分享變得前所未有的便捷。然而&#xff0c;這種便利性也帶來了嚴重的版權保護挑戰。數字視頻的易復制性使得盜版和非法傳播成為困擾內容創作者和版權所有者的重大問題。傳統的加密技術雖然能…

linux 之virtio 的驅動框架

1、基本知識 上一篇文章介紹了 virtio 的核心數據的實現和邏輯&#xff1a;linux 之 virtio 子系統核心的數據結構-CSDN博客 virtio 是對半虛擬化 hypervisor 中的一組通用模擬設備的抽象。它允許 hypervisor 導出一組通用的模擬設備&#xff0c;并通過一個通用的應用編程接口…

項目1總結其三(圖片上傳功能)

1、UploadService public interface UploadService {//上傳圖片String uploadImage(MultipartFile file, String type); }upload.location D:/upload Value("${upload.location}")private String uploadLocation;//文件上傳路徑Overridepublic String uploadImage(M…

Linux應用層開發--線程池介紹

Glib 線程池 1. 線程池簡介 線程池是一種管理和重用多個線程的設計模式&#xff1a; 避免頻繁創建/銷毀線程的開銷。提高性能與資源利用率。任務提交后&#xff0c;由線程池內的線程自動執行&#xff0c;任務執行完線程不會退出&#xff0c;而是繼續等待下一個任務。 2. Gli…

【Python】Python 多進程與多線程:從原理到實踐

Python 多進程與多線程&#xff1a;從原理到實踐 文章目錄Python 多進程與多線程&#xff1a;從原理到實踐前言一、并發編程基礎&#xff1a;進程與線程1.1 進程&#xff08;Process&#xff09;1.2 線程&#xff08;Thread&#xff09;1.3 進程與線程的關系二、Python 中的 &q…

electron-vite_18Less和Sass共用樣式指定

項目中可以封裝less公用樣式和方法&#xff0c;比如自動以滾動條樣式、單行省略號、多行省略號、display:none等&#xff1b;關于additionalData的配置生效,請在main.js中引入一個別的樣式或vue組件中使用“<style lang“scss”><style>”找到electron.vite.config…

Python面試題及詳細答案150道(71-80) -- 文件操作篇

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…