【LeetCode熱題100】【滑動窗口】找到字符串中所有字母異位詞

給定兩個字符串?s?和?p,找到?s?中所有?p?的?異位詞?的子串,返回這些子串的起始索引。不考慮答案輸出的順序。

異位詞?指由相同字母重排列形成的字符串(包括相同的字符串)。

示例?1:

輸入: s = "cbaebabacd", p = "abc"
輸出: [0,6]
解釋:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的異位詞。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的異位詞。

?示例 2:

輸入: s = "abab", p = "ab"
輸出: [0,1,2]
解釋:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的異位詞。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的異位詞。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的異位詞。

提示:

  • 1 <= s.length, p.length <= 3 * 104
  • s?和?p?僅包含小寫字母

題解

一開始是想用兩層循環,先將p排序一次,然后將s中每個和p一樣長的子串拿出來重新排序之后和p比較是否相同,但是這種做法會超時

于是采用了官方的解法,官方的做法有兩個優點,一個是利用了滑動窗口,另一個是將判斷異位詞轉換成判斷每個字母出現的次數是否相同,這個確實是最快判斷是否是由相同字母組成的字符串的方法

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int>answer;int sLength=s.size(),pLength=p.size();if(sLength<pLength){ // 如果s短于p,后面無法放置窗口return {};}vector<int>ss(26),pp(26); // 記錄字母出現次數for(int i=0;i<pLength;i++){ // 放置滑動窗口ss[s[i]-'a']++;pp[p[i]-'a']++;}if(ss==pp)answer.emplace_back(0);for(int i=0;i<sLength-pLength;i++){ss[s[i]-'a']--; // 滑動窗口移動,去掉前一個字母的狀態ss[s[i+pLength]-'a']++; // 滑動窗口移動,增加后一個字母的狀態if(ss==pp)answer.emplace_back(i+1);}return answer;}
};

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

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

相關文章

611.有效的三角形個數

1.題目解析 給定一個包含非負整數的數組 nums &#xff0c;返回其中可以組成三角形三條邊的三元組個數。 補充&#xff1a; 1.三角形的判斷&#xff1a;假設有三條邊按大小排序&#xff1a; 2.題目示例 示例 1: 輸入: nums [2,2,3,4] 輸出: 3 解釋:有效的組合是: 2,3,4 (使用…

P1161 開燈題解

題目 在一條無限長的路上&#xff0c;有一排無限長的路燈&#xff0c;編號為1,2,3,4,…。 每一盞燈只有兩種可能的狀態&#xff0c;開或者關。如果按一下某一盞燈的開關&#xff0c;那么這盞燈的狀態將發生改變。如果原來是開&#xff0c;將變成關。如果原來是關&#xff0c;…

C現代方法(第27章)筆記——C99對數學計算的新增支持

文章目錄 第27章 C99對數學計算的新增支持27.1 <stdint.h>: 整數類型(C99)27.1.1 <stdint.h>類型27.1.2 對指定寬度整數類型的限制27.1.3 對其他整數類型的限制27.1.4 用于整型常量的宏 27.2 <inttype.h>: 整數類型的格式轉換(C99)27.2.1 用于格式指定符的宏…

人工智能與自然語言處理

人工智能&#xff08;AI&#xff09;與自然語言處理&#xff08;NLP&#xff09;是當前科技領域的兩大熱門話題。人工智能通過模擬人類的思維過程和智能行為&#xff0c;使計算機具備了一定的智能和自學能力。而自然語言處理則是指計算機對人類語言進行理解、處理和生成的技術。…

PCIe MPS參數介紹及如何更改

目錄 1.簡介 2.主要功能作用 3.MPS控制策略 4.如何更改 1.簡介 MPS 該參數含義是一個TLP包里攜帶的有效凈荷的最大值是多少字節&#xff08;該限制條件同時適用于寫操作和讀操作&#xff09;。 MRRS 該參數含義是一個TLP讀請求包&#xff0c;一次最多能向接收端請求讀出…

計算機畢業設計JAVA+SSM+springboot養老院管理系統

設計了養老院管理系統&#xff0c;該系統包括管理員&#xff0c;醫護人員和老人三部分。同時還能為用戶提供一個方便實用的養老院管理系統&#xff0c;管理員在使用本系統時&#xff0c;可以通過系統管理員界面管理用戶的信息&#xff0c;也可以進行個人中心&#xff0c;醫護等…

LeetCode 108. 將有序數組轉換為二叉搜索樹

對于算法題&#xff0c;按題型類別刷題才會更有成效&#xff0c;因此我這里在網上搜索并參考了下 “&#x1f525; LeetCode 熱題 HOT 100” 的題型歸類&#xff0c;并在其基礎上做了一定的完善&#xff0c;希望能夠記錄自己的刷題歷程&#xff0c;有所收獲&#xff01;點擊下發…

點滴生活記錄2

我從小跟著我爺爺奶奶&#xff0c;小學六年級轉到縣城上小學&#xff0c;就沒跟我奶奶他們住一起了。十一回家&#xff0c;把奶奶接到我這住&#xff0c;細想&#xff0c;自六年級之后&#xff0c;就很少跟奶奶住一起了。 奶奶&#xff08;間歇性&#xff09;耳聾&#xff0c;為…

104. 二叉樹的最大深度

給定一個二叉樹 root &#xff0c;返回其最大深度。二叉樹的最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 深度就是在層序遍歷的基礎上&#xff0c;每層遍歷一次&#xff0c;就增加一次深度&#xff01; import java.util.ArrayList; import java.util.LinkedL…

軟件測試相關

軟件測試是什么&#xff1f; 使用人工和自動手段來運行或測試某個系統的過程&#xff0c;其目的在于驗證它是否滿足規定的需求或弄清預期結果與實際結果的差別。 為什么做軟件測試&#xff1f;目的是什么&#xff1f; 發現軟件存在的代碼或業務邏輯錯誤 檢驗產品是否符合用戶需…

堅鵬:中國郵政儲蓄銀行數字化轉型戰略、方法與案例培訓

中國郵政儲蓄銀行擁有優良的資產質量和顯著的成長潛力&#xff0c;是中國領先的大型零售銀行。2016年9月在香港聯交所掛牌上市&#xff0c;2019年12月在上交所掛牌上市。中國郵政儲蓄銀行擁有近4萬個營業網點&#xff0c;服務個人客戶超6.5億戶。2022年&#xff0c;在《銀行家》…

算法Day24 不專心開車

不專心開車 Description 小碩開車經過一條公路&#xff0c;這條路線總共由n 1個不同海拔的點組成。小碩從海拔為0的點0開始騎行。 給小碩一個長度為n的整數數組arr&#xff0c;其中arr[i]是點i和點i 1的凈海拔高度差&#xff08;0≤i < n&#xff09;。請你返回最高點的海…

【LeetCode刷題-二叉樹】--110.平衡二叉樹

110.平衡二叉樹 方法一&#xff1a;自頂向下遞歸 對于當前遍歷到的節點&#xff0c;首先計算左右子樹的高度&#xff0c;如果左右子樹的高度差是否不超過 111&#xff0c;再分別遞歸地遍歷左右子節點&#xff0c;并判斷左子樹和右子樹是否平衡。這是一個自頂向下的遞歸的過程。…

力扣:197. 上升的溫度(Python3)

題目&#xff1a; 表&#xff1a; Weather ------------------------ | Column Name | Type | ------------------------ | id | int | | recordDate | date | | temperature | int | ------------------------ id 是該表具有唯一值的列。 該表…

[NAND Flash] 1.1 閃存(NAND Flash) 學習指南

依公知及經驗整理&#xff0c;原創保護&#xff0c;禁止轉載。 專欄 《深入理解NAND Flash》 ? 回首 漠然回首&#xff0c;從事存儲芯片行業已多年&#xff0c;這些年寶貴的青春都獻給了閃存。 我剛入行的時候&#xff0c;也是萌新一個&#xff0c;彷佛大學學的都沒有和這相…

Kubernetes簡介與部署

一、Kubernetes 簡介 1、概念&#xff1a; Kubernetes 又稱 k8s&#xff0c;是一個可移植、可擴展的開源平臺&#xff0c;用于管理容器化應用和服務&#xff0c;通過 Kubernetes 能夠進行應用的自動化部署和擴縮容。(k8s不是容器&#xff0c;而是一套容器編排系統) 官網&…

RC522(RFID射頻模塊)讀卡ID的簡單應用

文章目錄 一、RFID是什么&#xff1f;二、RC522模塊三、使用步驟1.硬件1.硬件連接2.引腳定義 2.軟件1.初始化配置代碼如下&#xff08;示例&#xff09;&#xff1a;2.引腳配置代碼如下&#xff08;示例&#xff09;&#xff1a;3.模塊復位代碼如下&#xff08;示例&#xff09…

11、虛函數、多態、純虛函數

11、虛函數、多態、純虛函數 虛函數覆蓋調用 多態實現多態的兩個必要條件多態 和 this指針多態的實現&#xff1a;虛函數表虛函數表與動態綁定動態綁定動態綁定對性能的影響 純虛函數抽象類純抽象類 虛函數 形如class 類名{ virtual 返回值 函數名(形參表) { … } }; 的成員函…

C++筆記之Delegate和委托構造(Delegating constructor)

C筆記之Delegate和委托構造辨析 code review! —— 杭州 2023-12-10 文章目錄 C筆記之Delegate和委托構造辨析0.有道詞典&#xff1a;英語發音1.ChatGPT&#xff1a;delegate概念詳解2.Delegate和“將可調用對象作為函數參數”是不是一回事&#xff1f;3.C的Delegate示例4.…

Numpy矩陣(第16講)

Numpy矩陣(第16講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ??????????????????????????????????????????????????????????????????????????????????????????…