【算法】滑動窗口——串聯所有單詞的子串

今天來以“滑動窗口”的思想來詳解一道比較困難的題目——串聯所有單詞的子串,有需要借鑒即可。

目錄

  • 1.題目
  • 2.下面是示例代碼
  • 3.總結

1.題目

題目鏈接:LINK
在這里插入圖片描述
這道題如果把每個字符串看成一個字母,就是另外一道中等難度的題目,即,找到字符串中所有字母異位詞:LINK

所以說白了,就是把每個字符串來當作一個字母進行處理,當然這僅僅是思想,相比于異位詞這個題來說,現在這道比較困難的題目還有以下不同的區別需要注意:

  • ①哈希表不同
  • ②left,right的起始位置,賦值不同
  • ③滑動窗口的執行次數

2.下面是示例代碼

class Solution {
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<string,int> hash_w;for(int i = 0; i < words.size(); i++){string str = words[i];hash_w[str]++;}for(int i = 0; i < words[0].size(); i++){unordered_map<string,int> hash_s;for(int left = i, right = i,count = 0; right + words[0].size() <= s.size(); right+=words[0].size()){//進窗口string in = s.substr(right,words[0].size());//取子串hash_s[in]++;if(hash_w.count(in) && hash_s[in] <= hash_w[in])count++;//判斷if(right - left + 1 > words[0].size() * words.size()){//出窗口string out = s.substr(left,words[0].size());if(hash_w.count(out) && hash_s[out] <= hash_w[out])count--;//這個地方需要注意要在--之前進行判斷hash_s[out]--;left+=words[0].size();}//更新結果if(count == words.size())ret.push_back(left);}}return ret;}
};

3.總結

  • 一、經驗
    這道題如果有“找到字符串中所有字母異位詞”這道題的經驗,說實在的不難,但前提是得有這個思想,沒做過“找到字符串中所有字母異位詞”這道題直接做這個的比較困難的題目的話會很難受。

  • 二、再就是語法上:

    • ①是對容器的基本語法要有點了解,知道會用一些基本的接口。
    • ②是我上面這個代碼其實還做了一點點語法優化
      就是在判斷count是否++或者–時候那個條件,即:if(hash_w.count(in) && hash_s[in] <= hash_w[in])count++;如果hash_w[in]不存在他會創建一個in,有點消耗時間

EOF

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

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

相關文章

對象,字符串的解構賦值

大家想了解更多&#xff0c;可以去看阮一峰的ECMAScript6(ES6)標準入門課程 對象 簡介 解構不僅可以用于數組&#xff0c;還可以用于對象。 let { foo, bar } { foo: aaa, bar: bbb }; foo // "aaa" bar // "bbb" 對象的解構與數組有一個重要的不同。…

[CAM_REQ_MGR_EVENT_MAX]高通6225平臺相機老化異常重啟

報錯log 相機老化出現20/7萬比例的老化異常重啟&#xff0c;具體報錯log入下 <4>[ 167.506585] [1970:01:02 18:52:26](0) [0:swapper/0]cam_v4l2_event_queue_notify_error: 251 callbacks suppressed 7 3339<6>[ 167.506602] [1970:01:02 18:52:26](0) [0:swap…

面試試題一

封裝&#xff08;Encapsulation&#xff09; 面試問題&#xff1a; 封裝在面向對象編程中扮演什么角色&#xff1f;如何在Java中實現封裝&#xff1f;有哪些最佳實踐可以幫助提高類的封裝性&#xff1f; 詳細答案&#xff1a; 封裝的角色&#xff1a; 封裝是面向對象編程的核…

CMake 的繼承關系

1. CMake如何確定繼承關系 在 CMake 中&#xff0c;父子關系是通過文件系統中的目錄結構來定義的。當你在一個目錄中創建一個 CMakeLists.txt 文件時&#xff0c;該目錄就被視為一個 CMake 項目的目錄&#xff0c;而該文件中的內容將被用于配置和構建該目錄中的項目。 當你在父…

不同路徑| 和 不同路徑||

不同路徑| 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角&#xff08;在下圖中標記為 “Finish” &#xff09;。 問總共有多少條不同的路徑&#xf…

Tomcat啟動閃退問題解決辦法

本文將通過一系列診斷步驟幫助您找出原因&#xff0c;并提供相應的解決辦法。 診斷步驟 查看日志文件 Tomcat的日志文件是解決啟動問題的第一線工具。查看logs目錄下的catalina.out和其他日志文件&#xff0c;這些文件經常記錄了錯誤信息和系統崩潰的線索。 cat /path/to/to…

C++編程與朱元墇的關系

學編程和英語沒關系&#xff0c;我說這句話&#xff0c;沒人會相信&#xff0c;也不會有人說我什么嘩眾取寵。 我說學編程和朱元墇有關系&#xff0c;一定有人說我放P&#xff0c;其實這個P也和朱元墇有關系&#xff0c; 和朱元墇有什么P關系啊。 真有這P事啊&#xff0c; 朱元…

LeetCode刷題筆記之圖論

1. 797【所有可能的路徑】 題目&#xff1a; 給你一個有 n 個節點的 有向無環圖&#xff08;DAG&#xff09;&#xff0c;請你找出所有從節點 0 到節點 n-1 的路徑并輸出&#xff08;不要求按特定順序&#xff09;。graph[i] 是一個從節點 i 可以訪問的所有節點的列表&#xf…

大學生體質測試|基于Springboot+vue的大學生體質測試管理系統設計與實現(源碼+數據庫+文檔)

大學生體質測試管理系統 目錄 基于Springboot&#xff0b;vue的大學生體質測試管理系統設計與實現 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 4教師功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算…

MySQL數據庫基礎功能

MySQL是一種常用的關系型數據庫管理系統&#xff0c;它廣泛應用于網站開發、數據分析和其他許多領域。 咋可以不專業搞這個&#xff0c;但是基礎的最好能看懂和應用&#xff0c;快去學習吧 下面是10個不同案例&#xff0c;展示MySQL的用法。 ①創建數據庫&#xff1a;使用CR…

C++筆試強訓day20

目錄 1.經此一役小紅所向無敵 2.連續子數組最大和 3.非對稱之美 1.經此一役小紅所向無敵 鏈接 簡單模擬即可。 需要注意的是&#xff1a; 除完之后有無余數&#xff0c;若有&#xff0c;則還可以再挨一次打。 #include <iostream> using namespace std; #define in…

設計模式——結構型模式——代理模式(靜態代理、動態代理:JDK、CGLIB)

目錄 代理模式 代理模式簡介 代理模式的分類 代理模式組成 代理模式的優缺點 靜態代理 背景前置 編寫代碼 JDK動態代理 編寫代碼 使用Arthas分析JDK動態代理底層原理 CGLIB動態代理 編寫代碼 三種代理的對比 代理模式使用場景 代理模式 代理模式簡介 代理模式屬…

Mybatis操作數據庫的兩種方式:Mapper代理模式

1.Mapper代理模式的特點 程序員沒有寫接口的子實現——直接獲取數據庫的數據 因為Mybatis定義了一套規則&#xff0c;對方法進行了實現&#xff0c;程序員只要遵循這套方法就可以直接使用 2.如何實現Mapper代理模式 步驟&#xff1a; 1.創建一個dao接口&#xff0c;在接口…

java項目之英語知識應用網站源碼(springboot+vue+mysql)

風定落花生&#xff0c;歌聲逐流水&#xff0c;大家好我是風歌&#xff0c;混跡在java圈的辛苦碼農。今天要和大家聊的是一款基于springboot的英語知識應用網站。項目源碼以及部署相關請聯系風歌&#xff0c;文末附上聯系信息 。 項目簡介&#xff1a; 英語知識應用網站的主要…

【免費】AME最新Adobe Media Encoder電腦軟件安裝包2024-2018支持WIN和MAC

Adobe MediaEncoder「Me」2024是一款功能強大的轉碼和媒體處理軟件&#xff0c;它不僅能輕松應對各種媒體文件的編碼和導出需求&#xff0c;還支持多種視頻格式和分辨率&#xff0c;讓你的視頻處理變得更加高效。此外&#xff0c;該軟件界面簡潔明了&#xff0c;操作簡便&#…

【一步一步了解Java系列】:了解Java與C語言的運算符的“大同小異”

看到這句話的時候證明&#xff1a;此刻你我都在努力~ 加油陌生人~ 個人主頁&#xff1a; Gu Gu Study ?? 專欄&#xff1a;一步一步了解Java 喜歡的一句話&#xff1a; 常常會回顧努力的自己&#xff0c;所以要為自己的努…

【Element-UI快速入門】

文章目錄 **Element-UI快速入門****一、Element-UI簡介****二、安裝Element-UI****三、引入Element-UI****四、使用Element-UI組件****五、自定義Element-UI組件樣式****六、Element-UI布局組件****七、Element-UI表單組件****八、插槽&#xff08;Slots&#xff09;和主題定制…

【數據結構】排序(一)—— 希爾排序(思路演進版)

目錄 一、常見的排序算法分類 二、常見排序算法的實現 2.1插入排序 2.1.1基本思想 2.1.2直接插入排序 思路 step1.單趟控制 step2.總體控制 代碼實現 測試 特性總結 2.1.3 希爾排序( 縮小增量排序 ) 基本思想 思路演進 &#x1f308;1.代碼實現單組排序&#…

你能堅持二十年如一日地積極試錯嗎?

你能堅持二十年如一日地積極試錯嗎&#xff1f;先說一個大家都耳熟能詳的人物&#xff1a;克里斯托弗哥倫布&#xff0c;他被稱為新大陸的發現者&#xff0c;是具有極高歷史地位的偉大航海家。 但是新大陸本來就不是所謂的“新”大陸&#xff0c;而是在4萬年前從白令海峽遷徙過…

端午節線上活動方案怎么寫?

一年一端午&#xff0c;一歲一安康。 如果您想組織端午活動&#xff0c;卻不知道如何安排&#xff0c;可以看看何策網&#xff0c;有很多案例參考&#xff0c;仿造模板修改即可。 下面分享一個線上端午節活動策劃方案&#xff0c;希望能幫到你&#xff01; 端午節作為祭祖祈…