力扣熱題100——滑動窗口

無重復字符的最長子串

在這里插入圖片描述

  • 步驟 1:初始狀態
    字符串 s = “abcabcbb”,哈希表 charSet 初始為空,雙指針 left = 0,right = 0。
哈希表(charSet): {}  
字符串:          a b c a b c b b  
指針:           ↑  left/right  
  • 步驟 2:right = 0(字符 ‘a’)

    操作:charSet.insert(‘a’)
    哈希表存儲:{‘a’}(字符 ‘a’ 作為鍵存入)

哈希表(charSet): {a}  
字符串:          a b c a b c b b  
指針:           ↑   ↑  left  right  
  • 步驟 3:right = 1(字符 ‘b’)

    操作:charSet.insert(‘b’)
    哈希表存儲:{‘a’, ‘b’}(新增字符 ‘b’)

哈希表(charSet): {a, b}  
字符串:          a b c a b c b b  
指針:           ↑     ↑  left    right  
  • 步驟 4:right = 2(字符 ‘c’)

    操作:charSet.insert(‘c’)
    哈希表存儲:{‘a’, ‘b’, ‘c’}(新增字符 ‘c’)

哈希表(charSet): {a, b, c}  
字符串:          a b c a b c b b  
指針:           ↑       ↑  left      right  
  • 步驟 5:right = 3(字符 ‘a’)

    檢查:charSet.count(‘a’) → true(‘a’ 已存在)
    操作:移除 left 指向的字符 ‘a’ → charSet.erase(‘a’),哈希表變為 {‘b’, ‘c’}
    left++(left = 1)重新插入 ‘a’ → charSet.insert(‘a’),哈希表變為 {‘b’, ‘c’, ‘a’}

哈希表(charSet): {b, c, a}  
字符串:          a b c a b c b b  
指針:             ↑       ↑  left      right  
  • 步驟 6:right = 4(字符 ‘b’)

    檢查:charSet.count(‘b’) → true(‘b’ 已存在)
    操作:移除 left 指向的字符 ‘b’ → charSet.erase(‘b’),哈希表變為 {‘c’, ‘a’}
    left++(left = 2)重新插入 ‘b’ → charSet.insert(‘b’),哈希表變為 {‘c’, ‘a’, ‘b’}

哈希表(charSet): {c, a, b}  
字符串:          a b c a b c b b  
指針:               ↑       ↑  left      right  
#include <string>       // 引入string頭文件,用于處理字符串
#include <unordered_set> // 引入unordered_set頭文件,用于快速判斷字符是否重復
using namespace std;    // 使用std命名空間,簡化代碼書寫class Solution {        // 定義Solution類,封裝解題方法
public:                 // 公共成員函數,外部可直接調用// 函數定義:接收字符串s,返回最長無重復字符子串的長度int lengthOfLongestSubstring(string s) {unordered_set<char> charSet; // 哈希集合,存儲當前窗口內的所有字符(用于去重判斷)int maxLen = 0;              // 記錄最長無重復子串的長度,初始為0int left = 0;                // 滑動窗口的左邊界指針,初始為0// 右指針right遍歷字符串,作為窗口的右邊界for (int right = 0; right < s.size(); ++right) {// 若當前字符s[right]已在窗口中(重復),則移動左指針縮小窗口// 直到窗口中不再包含s[right]while (charSet.count(s[right])) {charSet.erase(s[left]); // 移除左指針指向的字符left++;                 // 左指針右移,縮小窗口}// 將當前字符加入窗口(此時窗口中無重復字符)charSet.insert(s[right]);// 更新最長長度:取當前窗口長度(right - left + 1)和歷史最大值的較大值maxLen = max(maxLen, right - left + 1);}// 返回最長無重復子串的長度return maxLen;}
};

找到字符串中所有字母異位詞

在這里插入圖片描述

#include <vector>       // 引入vector容器頭文件,用于存儲結果和字符計數
#include <string>       // 引入string頭文件,處理字符串參數
using namespace std;    // 使用std命名空間,簡化代碼書寫class Solution {        // 定義Solution類,封裝解題方法
public:                 // 公共成員函數,外部可直接調用// 函數定義:接收兩個字符串s和p,返回s中所有p的字母異位詞的起始索引vector<int> findAnagrams(string s, string p) {vector<int> res; // 定義結果容器,存儲符合條件的起始索引int sLen = s.size(), pLen = p.size(); // 計算s和p的長度// 邊界判斷:若s的長度小于p,不可能存在異位詞,直接返回空結果if (sLen < pLen) return res;// 定義兩個計數數組(26個元素對應a-z),統計字符出現次數vector<int> sCount(26, 0), pCount(26, 0);// 初始化計數:統計p的所有字符,以及s中前pLen個字符的出現次數for (int i = 0; i < pLen; ++i) {pCount[p[i] - 'a']++;  // p[i]-'a'將字符轉為0-25的索引(如'a'→0,'b'→1)sCount[s[i] - 'a']++;  // 同步統計s的初始窗口(0到pLen-1)}// 若初始窗口的字符計數與p相同,說明0是有效的起始索引if (sCount == pCount) res.push_back(0);// 滑動窗口:從pLen位置開始遍歷s的剩余字符for (int i = pLen; i < sLen; ++i) {// 移除窗口左側的字符(i-pLen是即將滑出窗口的索引)sCount[s[i - pLen] - 'a']--;// 加入窗口右側的新字符(當前i位置的字符)sCount[s[i] - 'a']++;// 若當前窗口的字符計數與p相同,記錄起始索引(i-pLen+1)if (sCount == pCount) res.push_back(i - pLen + 1);}return res; // 返回所有有效起始索引}
};

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

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

相關文章

SOD-YOLO:增強基于YOLO的無人機影像小目標檢測

摘要 https://www.arxiv.org/pdf/2507.12727 小目標檢測仍是目標檢測領域中的一個挑戰性問題。為應對這一挑戰&#xff0c;我們提出了一種基于YOLOv8的增強模型SOD-YOLO。該模型在頸部&#xff08;neck&#xff09;中集成了ASF&#xff08;注意力尺度序列融合&#xff09;機制以…

監督微調-指令微調-偏好微調

有監督微調 有監督微調是使用輸入及其標簽對的典型情況。例如&#xff0c;判斷郵件是垃圾郵件還是非垃圾郵件&#xff0c;判斷情感是積極還是消極。根據文檔的主要主題對其進行分類也是一種常見應用。模型會將輸入文本的相應表示&#xff08;隱藏狀態或嵌入向量&#xff09;作為…

樓宇自控系統對建筑碳中和目標的實現具重要價值

隨著全球氣候變化問題日益嚴峻&#xff0c;建筑行業作為碳排放的重要來源之一&#xff0c;其節能減排工作備受關注。樓宇自控系統&#xff08;Building Automation System&#xff0c;BAS&#xff09;作為智能建筑的核心組成部分&#xff0c;通過集成控制、監測和管理建筑內的各…

【YOLO學習筆記】YOLOv5詳解

一、數據增強 mosaic仿射變換與透視變換Mixup mosaic代碼位置仿射變換 與 透視變換?代碼片段位置 二、網絡結構 1. 網絡不同尺寸 nsmlx與網絡深寬度 yolov5 官方提供了5個目標檢測的網絡版本&#xff1a;yolov5n、yolov5s、yolov5m、yolov5l、yolov5x &#xff0c;早年是…

WebRTC前處理模塊技術詳解:音頻3A處理與視頻優化實踐

一、WebRTC前處理模塊概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;作為實時音視頻通信的核心技術&#xff0c;其前處理模塊是提升媒體質量的關鍵環節。該模塊位于媒體采集與編碼之間&#xff0c;通過對原始音頻/視頻數據進行優化處理&#xff0c;解決實時…

ssm復習

Spring Framework系統架構核心容器的學習IOC/DIIOC容器IOC使用對象時,由主動new產生的對象轉換為由外部提供對象,此過程中對象的創建的控制權交由外部,此思想稱為控制反轉, (實現了自己new的解耦) 對象創建的控制權Spring提供一個容器,稱為IOC容器 用來充當IOC思想的外部Bea…

ESP32:2.搭建UDP服務器

硬件&#xff1a;ESP32-Devkit-V4 MODEL:ESP32-32U 庫&#xff1a;ESP-IDF v5.4.1 系統&#xff1a;windows中的虛擬機 ubuntu 22.04 實現STA&#xff0c;主動連接AP后&#xff0c;打印IP地址&#xff0c;獲取IP后&#xff0c;創建socket&#xff0c;搭建UDP 服務器&#xff0…

【Linux】動靜態庫制作

&#x1f43c;故事背景假設今天你有一位舍友。你需要幫助他完成老師的作業。而他寫的代碼依賴兩個文件&#xff08;mymath.h,mystdio.h&#xff09;。但是這兩個文件的功能他不會寫&#xff0c;他只會調用。他的調用代碼:#include"mystdio.h" #include"mymath.h…

使用Database Navigator插件進行連接sqlite報錯invalid or incomplete database

解決方案 &#xff0c;將這個db.sqlite3文件拷貝到盤的文件中 &#xff0c;修改文件夾名字&#xff0c;重新使用絕對路徑訪問 db.sqlite3&#xff0c;將路徑名字的中文去掉 &#xff0c;不能有中文

【Linux】重生之從零開始學習運維之主從MGR高可用

MGR集群部署12、15、18主機環境準備ssh免密碼登錄\rm -rf .ssh/* ssh-keygen ssh-copy-id 127.1 scp -r .ssh 10.0.0.12:/root/ ssh root10.0.0.12還原基礎環境systemctl stop mysqld \rm -rf /var/lib/mysql/* id mysqlvim /etc/my.cnf.d/mysql-server.cnf [mysqld] datadir/v…

如何在虛擬機(Linux)安裝Qt5.15.2

1.進入到阿里的網站下載在線安裝包 qt-official_releases-online_installers安裝包下載_開源鏡像站-阿里云 https://mirrors.aliyun.com/qt/official_releases/online_installers/?spma2c6h.13651104.d-5201.2.60ad4773ZZNPNm 2.下載完畢后&#xff0c;進入到下載地址&…

【運維進階】DHCP服務配置和DNS域名解析

DHCP服務配置和DNS域名解析 DHCP 服務介紹 在大型網絡中&#xff0c;系統靜態分配IP地址面臨問題&#xff1a; 確保不要同時在多個系統上使用同一個地址。部署新系統通常需要手動分配其IP地址。在云環境中&#xff0c;實例的網絡是自動化配置的。 動態主機配置協議&#xff08;…

VisionPro MR環境下虛擬物體與現實的透明度混合

display.rgb (virtualcontent.rgb*1)(passthrough.rgb*(1 - vistualcontent.a) viirtualcontent預乘過a值了&#xff0c;跟透明度混合公式一致 人頭檢測挖孔不清晰問題&#xff0c;這個a值變成設備層動態檢測人頭的a值&#xff0c;當面前的渲染壓力過大時&#xff0c;會導致…

css怪異模式(Quirks Mode)和標準模式(Standards Mode)最明顯的區別

文章目錄css怪異模式&#xff08;Quirks Mode&#xff09;和標準模式&#xff08;Standards Mode&#xff09;最明顯的區別詳細對比示例對比&#xff08;盒模型&#xff09;標準模式&#xff08;Standards Mode&#xff09;怪異模式&#xff08;Quirks Mode&#xff09;如何觸發…

一種簡單的3dnr去噪算法介紹

一段未經過插補的視頻圖像可以分解為若干幀&#xff0c;為了能正確地找到并去除圖像幀中的噪聲污染&#xff0c;由于視頻圖像各幀的連續性&#xff0c;在去噪的過程中就必須考慮幀圖像的空間性和時間性&#xff0c;一個簡單的例子&#xff0c;在去噪算法中就必須考慮&#xff0…

【數據結構初階】--排序(四):歸并排序

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

GaussDB 并行創建索引

1 背景當業務數據在單表存儲達到一定的數量級時&#xff0c;此時對表創建索引是要花費時間的。GaussDB為了解決這個問題采用并行創建索引技術&#xff0c;以提高創建索引的效率。2 示例步驟1&#xff1a;根據實際情況調整maintenance_work_mem參數該大小。[Rubydtest1 ~]$ gsq…

LOOP Finance:一場 Web3 共和國中的金融制度實驗

LOOP Finance 是建構于幣安智能鏈&#xff08;BNB Chain&#xff09;上的定投型DEFI理財協議。 它以凱因斯經濟學為啟發&#xff0c;設計出一套長期、安全、穩定收益的全新DEFI玩法&#xff0c;兼顧穩健利息回報與DEFI高速成長的潛力。 通過生態機制&#xff0c;LOOP要求每位參…

【golang面試題】Golang遞歸函數完全指南:從入門到性能優化

引言&#xff1a;遞歸的本質與挑戰 在Golang中&#xff0c;遞歸函數是一把鋒利的雙刃劍。它通過函數自身調用實現問題分解&#xff0c;讓代碼變得簡潔優雅&#xff0c;但也容易因無限遞歸、棧溢出或性能問題讓開發者陷入困境。本文將從基礎到高級&#xff0c;全面解析Golang遞歸…

功能安全和網絡安全的綜合保障流程

摘要網絡物理系統是控制機械部件的計算機化系統。這些系統必須既功能安全又網絡安全。因此&#xff0c;已建立的功能安全與網絡安全標準需求創建網絡安全檔案&#xff08;ACs&#xff09;&#xff0c;以論證系統是功能安全與網絡安全的&#xff0c;即所有功能安全與網絡安全目標…