[面試精選] 0076. 最小覆蓋子串

文章目錄

      • 1. 題目鏈接
      • 2. 題目描述
      • 3. 題目示例
      • 4. 解題思路
      • 5. 題解代碼
      • 6. 復雜度分析

1. 題目鏈接


76. 最小覆蓋子串 - 力扣(LeetCode)


2. 題目描述


給你一個字符串 s 、一個字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字符的子串,則返回空字符串 ""

注意:

  • 對于 t 中重復字符,我們尋找的子字符串中該字符數量必須不少于 t 中該字符數量。
  • 如果 s 中存在這樣的子串,我們保證它是唯一的答案。

3. 題目示例


示例 1 :

輸入:s = "ADOBECODEBANC", t = "ABC"
輸出:"BANC"
解釋:最小覆蓋子串 "BANC" 包含來自字符串 t 的 'A'、'B' 和 'C'。

示例 2 :

輸入:s = "a", t = "a"
輸出:"a"
解釋:整個字符串 s 是最小覆蓋子串。

4. 解題思路


  1. 問題理解
    • 給定一個字符串 S 和一個字符串 t,需要在 S 中找到包含 t 所有字符的最短子串。
    • 子串必須包含 t 的所有字符,且字符的出現次數不少于 t 中的出現次數。
  2. 關鍵思路
    • 滑動窗口:使用雙指針(leftright)維護一個窗口,通過移動指針動態調整窗口大小。
    • 哈希表統計:使用數組 cntScntT 分別統計窗口內字符和 t 中字符的出現次數。
    • 窗口有效性檢查:通過 isCovered 方法檢查當前窗口是否滿足條件。
  3. 算法流程
    • 初始化 cntT 數組,統計 t 中字符的出現次數。
    • 使用雙指針 leftright 遍歷 S
      • right 右移,擴展窗口,更新 cntS
      • 當窗口滿足條件時,嘗試收縮 left 指針,尋找更小的窗口。
      • 記錄最小窗口的左右邊界。
    • 返回最小窗口對應的子串。

5. 題解代碼


class Solution {public String minWindow(String S, String t) {char[] s = S.toCharArray(); // 將字符串S轉為字符數組int m = s.length; // 字符串S的長度int ansLeft = -1; // 記錄最小窗口的左邊界,初始為-1表示未找到int ansRight = m; // 記錄最小窗口的右邊界,初始為m(字符串長度)// cntS數組記錄當前窗口內各字符的出現次數int[] cntS = new int[128]; // ASCII碼范圍0-127// cntT數組記錄字符串t中各字符的出現次數int[] cntT = new int[128];// 初始化cntT數組for (char c : t.toCharArray()) {cntT[c]++;}int left = 0; // 滑動窗口的左指針for (int right = 0; right < m; right++) { // 滑動窗口的右指針cntS[s[right]]++; // 將右指針指向的字符加入窗口// 檢查當前窗口是否包含t的所有字符while (isCovered(cntS, cntT)) { // 如果當前窗口比之前記錄的最小窗口更小if (right - left < ansRight - ansLeft) { ansLeft = left; // 更新最小窗口的左邊界ansRight = right; // 更新最小窗口的右邊界}cntS[s[left]]--; // 將左指針指向的字符移出窗口left++; // 左指針右移}}// 如果找到了符合條件的窗口,返回對應的子串;否則返回空字符串return ansLeft < 0 ? "" : S.substring(ansLeft, ansRight + 1);}// 檢查cntS是否包含cntT的所有字符(即cntS中各字符的數量都不小于cntT)private boolean isCovered(int[] cntS, int[] cntT) {// 檢查大寫字母for (int i = 'A'; i <= 'Z'; i++) {if (cntS[i] < cntT[i]) {return false;}}// 檢查小寫字母for (int i = 'a'; i <= 'z'; i++) {if (cntS[i] < cntT[i]) {return false;}}return true;}
}

6. 復雜度分析


  1. 時間復雜度
    • 遍歷 S 的時間復雜度為 O(m),其中 mS 的長度。
    • isCovered 方法的時間復雜度為 O(1)(因為字符集大小固定為52個字母)。
    • 總體時間復雜度為 O(m)。
  2. 空間復雜度
    • cntScntT 數組的大小為 O(128) = O(1)。
    • 其他變量占用常數空間。
    • 總體空間復雜度為 O(1)。

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

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

相關文章

rabbitmq的高級特性

一.發送者的可靠性 1.生產者重試機制 修改publisher模塊的application.yaml文件 spring:rabbitmq:connection-timeout: 1s # 設置MQ的連接超時時間template:retry:enabled: true # 開啟超時重試機制initial-interval: 1000ms # 失敗后的初始等待時間multiplier: 1 # 失敗后下…

北京大學肖臻老師《區塊鏈技術與應用》公開課:02-BTC-密碼學原理

文章目錄 1.比特幣中用到的密碼學的功能2. hash3. 簽名 1.比特幣中用到的密碼學的功能 比特幣中用到密碼學中兩個功能&#xff1a; hash、 簽名。 2. hash hash函數的三個特性&#xff1a;抗碰撞性&#xff08;Collision Resistance&#xff09;、隱蔽性&#xff08;Hiding&…

Spring Cloud Gateway高并發限流——基于Redis實現方案解析

本文是一個基于 Spring Cloud Gateway 的分布式限流方案&#xff0c;使用Redis Lua實現高并發場景下的精準流量控制。該方案支持動態配置、多維度限流&#xff08;API路徑/IP/用戶&#xff09;&#xff0c;并包含完整的代碼實現和性能優化建議。 一、架構設計 #mermaid-svg-vg…

SpringAI--RAG知識庫

SpringAI–RAG知識庫 RAG概念 什么是RAG&#xff1f; RAG(Retrieval-Augmented Genreation&#xff0c;檢索增強生成)是一種結合信息檢索技術和AI內容生成的混合架構&#xff0c;可以解決大模型的知識時效性限制和幻覺問題。 RAG在大語言模型生成回答之前&#xff0c;會先從…

【PhysUnits】14 二進制數的標準化表示(standardization.rs)

一、源碼 這段代碼主要用于處理二進制數的標準化表示。它定義了兩個特質(trait) IfB0 和 IfB1&#xff0c;以及它們的實現&#xff0c;用于處理二進制數的前導零及前導一的簡化。 use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};/// 處理 B0<H> 類型…

將 ubutun 的網絡模式 從NAT 改到 橋接模式后,無法上網,linux 沒有IP地址 的解決方案

首先要將 ubutun 的網絡模式設置為橋接模式 這里再從 NAT 模式改動成 橋接模式的時候&#xff0c;還出現了一個問題。改成橋接模式后&#xff0c;linux沒有ip地址了。原因是 不知道什么時候 將 虛擬網絡編輯器 中的值改動了 要選擇這個 自動 選項

多模態大語言模型arxiv論文略讀(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ?? 論文標題&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…

電腦主板VGA長亮白燈

電腦主板VGA長亮白燈 起因解決方法注意事項&#xff1a; 起因 搬家沒有拆機整機在車上晃蕩導致顯卡松動接觸不良&#xff08;一般VGA長亮白燈都和顯卡有關&#xff0c;主要排查顯卡&#xff09; 解決方法 將顯卡拆下重新安裝即可 注意事項&#xff1a; 不可直接拔下顯卡&a…

【監控】pushgateway中間服務組件

Pushgateway 是 Prometheus 生態中的一個中間服務組件&#xff0c;以獨立工具形式存在&#xff0c;主要用于解決 Prometheus 無法直接獲取監控指標的場景&#xff0c;彌補其定時拉取&#xff08;pull&#xff09;模式的不足。 其用途如下&#xff1a; 突破網絡限制&#xff1…

打造AI智能旅行規劃器:基于LLM和Crew AI的Agent實踐

引言 今天來學習大佬開發的一個AI驅動的旅行規劃應用程序&#xff0c;它能夠自動處理旅行規劃的復雜性——尋jni找航班、預訂酒店以及優化行程。傳統上&#xff0c;這個過程需要手動搜索多個平臺&#xff0c;常常導致決策效率低下。 通過利用**代理型人工智能&#xff08;Age…

21. 自動化測試框架開發之Excel配置文件的測試用例改造

21. 自動化測試框架開發之Excel配置文件的測試用例改造 一、測試框架核心架構 1.1 組件依賴關系 # 核心庫依賴 import unittest # 單元測試框架 import paramunittest # 參數化測試擴展 from chap3.po import * # 頁面對象模型 from file_reader import E…

如何在電力系統中配置和管理SNTP時間同步?

在電力系統中配置和管理 SNTP 時間同步需結合行業標準&#xff08;如《DL/T 1100.1-2019》&#xff09;和分層架構特點&#xff0c;確保安全性、可靠性和精度適配。以下是具體操作指南&#xff0c;涵蓋架構設計、設備配置、安全管理、運維監控四大核心環節&#xff0c;并附典型…

MTK-關于HW WCN的知識講解

前言: 最近做項目過程中和硬件打交道比較多,現在關于整理下硬件的HW wcn的知識點 一 MTK常見的MT6631 Wi-Fi 2.4GHz 匹配調諧指南 ?拓撲結構選擇? 推薦采用并聯電容拓撲(?shunt cap topology?)代替并聯電感拓撲(?shunt inductor topology?),以減少潛在電路設計…

(1)課堂 1--5,這五節主要講解 mysql 的概念,定義,下載安裝與卸載

&#xff08;1&#xff09;謝謝老師&#xff1a; &#xff08;2&#xff09;安裝 mysql &#xff1a; &#xff08;3&#xff09;鏡像下載 &#xff0c;這個網址很好 &#xff1a; &#xff08;4&#xff09; 另一個虛擬機的是 zhang 123456 &#xff1a; 接著配置…

U-Boot ARMv8 平臺異常處理機制解析

入口點&#xff1a;arch/arm/cpu/armv8/start.S 1. 判斷是否定義了鉤子&#xff0c;如有則執行&#xff0c;否則往下走。執行save_boot_params&#xff0c;本質就是保存一些寄存器的值。 2. 對齊修復位置無關碼的偏移 假設U-Boot鏈接時基址為0x10000&#xff0c;但實際加載到0…

mysql安裝教程--筆記

一、Windows 系統安裝 方法1&#xff1a;使用 MySQL Installer&#xff08;推薦&#xff09; 1. 下載安裝包 訪問 MySQL 官網下載頁面&#xff0c;選擇 MySQL Installer for Windows。 2. 運行安裝程序 雙擊下載的 .msi 文件&#xff0c;選擇安裝類型&#xff1a; ? Developer…

投資策略規劃最優決策分析

目錄 一、投資策略規劃問題詳細 二、存在最優投資策略&#xff1a;每年都將所有錢投入到單一投資產品中 &#xff08;一&#xff09;狀態轉移方程 &#xff08;二&#xff09;初始條件與最優策略 &#xff08;三&#xff09;證明最優策略總是將所有錢投入到單一投資產品中…

NGINX HTTP/3 實驗指南安裝、配置與調優

一、HTTP/3 簡介 基于 QUIC&#xff1a;在 UDP 之上實現的多路復用傳輸&#xff0c;內置擁塞控制與前向糾錯&#xff0c;無需三次握手即可恢復連接。零 RTT 重連&#xff1a;借助 TLS 1.3&#xff0c;實現連接恢復時的 0-RTT 數據發送&#xff08;視底層庫支持&#xff09;。多…

編程日志5.28

string賦值操作 算法: #include<iostream> using namespace std; int main() { //1.字符串常量的賦值 string s1; s1 = "英雄哪里出來"; cout << s1 << endl; //2.字符串變量的賦值 string s2; s2 = s1; cout <…

AE的ai圖層導到Ai

AE的ai圖層導到ai 解決方法: 1、打開ai軟件&#xff0c;不用新建&#xff0c;留在那就行。 2、在AE里選中任意一個ai文件圖層&#xff0c;只需同時按住ctrl和英文字母鍵&#xff0c;圖層就會自動全部導入到ai中 英文字母鍵的詳情可以參考&#xff1a;http://www.yayihouse.co…