438.找出字符串中所有字母異位詞

題目:

給定兩個字符串?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的長度或者s的剩余長度小于p直接返回,否則將窗口內的字母進行排序,如果排序得到的結果是相同的就認為是異位詞

代碼:

class Solution:def findAnagrams(self, s: str, p: str):  len_s, len_p = len(s), len(p)if len_s<len_p:return []p_sorted = sorted(p)outputs = []for i in range(len(s)):if len_s-i<len_p:return outputss_sorted = sorted(s[i:i+len(p)])if s_sorted==p_sorted:outputs.append(i)return outputs

官方代碼:

# 官方代碼
class Solution:def findAnagrams(self, s: str, p: str):s_len, p_len = len(s), len(p)# 如果s的長度比p的長度小,則不存在異位詞if s_len < p_len:return []ans = []# 子串中只包含小寫字母,記錄字母的個數count = [0] * 26for i in range(p_len):count[ord(s[i]) - 97] += 1count[ord(p[i]) - 97] -= 1# 判斷一共多少個字母存在differ = [c != 0 for c in count].count(True)if differ == 0:ans.append(0)for i in range(s_len - p_len):# 遍歷s得到字母,如果在count中該字母的數量為1,則認為當前s和p中該字母抵消掉了,所有存在的字母種類數-1if count[ord(s[i]) - 97] == 1:  # 窗口中字母 s[i] 的數量與字符串 p 中的數量從不同變得相同differ -= 1# 遍歷s得到字母,如果在count中該字母的數量為0,則認為p中沒有這個字母而s中有這個字母,s的字母種類數+1elif count[ord(s[i]) - 97] == 0:  # 窗口中字母 s[i] 的數量與字符串 p 中的數量從相同變得不同differ += 1# 遍歷過s的字母之后將字母的個數-1count[ord(s[i]) - 97] -= 1# 利用滑動窗口來保證字母的種類相同,如果窗口的字母的個數及字母的種類和p的字母的個數及字母的種類相同則認為是一個異位詞if count[ord(s[i + p_len]) - 97] == -1:  # 窗口中字母 s[i+p_len] 的數量與字符串 p 中的數量從不同變得相同differ -= 1elif count[ord(s[i + p_len]) - 97] == 0:  # 窗口中字母 s[i+p_len] 的數量與字符串 p 中的數量從相同變得不同differ += 1count[ord(s[i + p_len]) - 97] += 1if differ == 0:ans.append(i + 1)return ans

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

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

相關文章

win32匯編環境,對話框程序中創建托盤示例一

;運行效果 ;win32匯編環境,對話框程序中創建托盤示例一 ;托盤&#xff0c;就是電腦桌面右下角那個角落里的圖標&#xff0c;這里展示基本的應用方法。 ;直接抄進RadAsm可編譯運行。重要部分加備注。 ;下面為asm文件 ;>>>>>>>>>>>>>>…

Ansible相關工具:ansible-doc、ansible

文章目錄 管理方式相關工具ansible-doc命令用法案例 ansibleansible主配置文件日志文件主機清單 ansible命令基本格式&#xff1a;選項說明&#xff1a;ansible的Host-pattern或關系邏輯與邏輯非正則表達式 ansible命令執行過程ansible 的執行狀態 管理方式 利用ansible實現管…

LeetCode 熱題 100_前 K 個高頻元素(73_347_中等_C++)(堆)(哈希表+排序;哈希表+優先隊列(小根堆))

LeetCode 熱題 100_前 K 個高頻元素&#xff08;73_347&#xff09; 題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;哈希表排序&#xff09;&#xff1a;思路二&#xff08;哈希表優先隊列&#xff08;小根堆&#xff0…

使用Python在Word中生成多種不同類型的圖表

目錄 工具與環境配置 在 Word 中創建圖表的步驟 在Word中創建柱形圖 在Word中創建條形圖 在Word中創建折線圖 在Word中創建餅圖 在Word中創建散點圖 在Word中創建氣泡圖 在 Word 文檔中插入圖表不僅能更直觀地呈現數據&#xff0c;還能提升文檔的可讀性和專業性。常見的…

項目-個人博客測試報告

目錄 一、項目背景 二、項目功能 三、測試計劃 &#xff08;1&#xff09;功能測試 &#xff08;2&#xff09;自動化測試 &#xff08;3&#xff09;性能測試 一、項目背景 1、個人博客系統是一個操作簡單的基于Spring前后端分離的項目&#xff0c;同時使用MySQL數據庫來進…

前端npm包- CropperJS

文章目錄 一、CropperJS**核心特性****官網與文檔****安裝與使用**1. **通過 npm/yarn/pnpm 安裝**2. **HTML 結構**3. **引入 CSS 和 JS**4. **初始化裁剪器** **相關插件/替代方案****適用場景****注意事項** 總結 一、CropperJS cropperjs 是一個輕量級、功能強大的 圖片裁…

楊輝三角形(信息學奧賽一本通-2043)

【題目描述】 例5.11 打印楊輝三角形的前n(2≤n≤20)行。楊輝三角形如下圖&#xff1a; 當n5時 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 輸出&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 【輸入】 輸入行數n。 【輸出】 輸出如題述三角形。n行&#…

圖論入門【數據結構基礎】:什么是圖?如何表示圖?

圖&#xff08;Graph&#xff09; 是一種非線性數據結構&#xff0c;用于表示對象之間的關系。圖由 頂點&#xff08;Vertex&#xff09; 和 邊&#xff08;Edge&#xff09; 組成&#xff0c;其中頂點表示對象&#xff0c;邊表示對象之間的關系。圖廣泛應用于計算機科學、數學…

如何使用HACS一鍵集成米家與果家設備到HomeAssistant玩轉智能家居

文章目錄 前言1. 下載HACS源碼2. 添加HACS商店3. 綁定米家設備 前言 各位科技潮人和智能家居發燒友們&#xff0c;是不是也夢想著把家里變成一個高科技的空間&#xff1f;有了群暉NAS這位得力助手&#xff0c;不僅存儲空間大得嚇人&#xff0c;還能通過Docker輕松安裝各種應用…

《Java對象“比武場“:Comparable與Comparator的巔峰對決》

目錄 引言&#xff1a; 一、認識接口 1.1 Comparable 1.2 Comparator ?編輯 1.3 核心概念對比 二、代碼實現對比 2.1 Comparable 實現示例 2.2 Comparator 實例示例 三、核心區別詳解 3.1 設計理念差異 3.2 方法調用 3.3 使用情景 四、本質區別總結 引言&#x…

Android自動化測試工具

細解自動化測試工具 Airtest-CSDN博客 以下是幾種常見的Android應用自動化測試工具&#xff1a; Appium&#xff1a;支持多種編程語言&#xff0c;如Java、Python、Ruby、JavaScript等。可以用于Web應用程序和原生應用程序的自動化測試&#xff0c;并支持iOS和Android平臺。E…

Go vs Rust vs C++ vs Python vs Java:誰主后端沉浮

一、核心性能對比(基于TechEmpower基準測試) 語言單核QPS延遲(ms)內存消耗適用場景Rust650,0000.1245MB高頻交易/區塊鏈C++720,0000.0932MB游戲服務器/實時渲染Go230,0000.45110MB微服務/API網關Java180,0001.2450MB企業ERP/銀行系統Python12,0008.5220MBAI接口/快速原型技術…

vue3:八、登錄界面實現-頁面初始搭建、基礎實現

一、初始工作 1、創建登錄文件 在src/views中創建文件LoginView.vue文件 2、創建路由 在router/index.js中增加登錄的信息 代碼 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue const router createRouter({hist…

結構型模式之適配器模式:讓不兼容的接口兼容

在軟件開發中&#xff0c;經常會遇到這樣一種情況&#xff1a;系統的不同部分需要進行交互&#xff0c;但由于接口不兼容&#xff0c;導致無法直接使用。這時&#xff0c;適配器模式&#xff08;Adapter Pattern&#xff09;就能派上用場。適配器模式是設計模式中的結構型模式&…

Qt從入門到入土(十) -數據庫操作--SQLITE

認識 數據庫是用于存儲、管理和檢索數據的系統化集合。它是一種按照特定結構組織數據的存儲方式&#xff0c;通過軟件&#xff08;數據庫管理系統&#xff0c;DBMS&#xff09;來實現數據的高效存儲、查詢、更新和管理。通過文件存儲數據適用于少量的數據&#xff0c;而當擁有…

Django REST Framework中的序列化器類和視圖類

序列化器類 一、Serializer序列化類 Serializer是DRF的序列化器基類&#xff0c;提供基本功能&#xff0c;使用Serializer類需要自己定義字段名稱和類型。 BookSerializer(Serializer):name serializers.CharField()price serlializers.IntegerField()date serlializers.…

圖像分類數據集

《動手學深度學習》-3.5-學習筆記 # 通過ToTensor實例將圖像數據從PIL類型變換成32位浮點數格式&#xff0c; # 并除以255使得所有像素的數值均在0&#xff5e;1之間 trans transforms.ToTensor()#用于將圖像數據從 PIL 圖像格式&#xff08;Python Imaging Library&#xff…

架構師面試(十五):熔斷設計

問題 某電商平臺經常需要在大促運營活動中暫停評論、退款等業務&#xff0c;基于服務治理的設計理念&#xff0c;我們需要對該電商平臺微服務系統的【服務熔斷】進行設計&#xff0c;對此下面描述中說法正確的有哪幾項呢&#xff1f; A. 服務管控系統管理著平臺中所有服務之間…

Ubuntu20.04安裝運行DynaSLAM

目錄 一、安裝Anaconda 二、相關依賴庫安裝 1、boost安裝 2、Eigen 3安裝 3、opencv安裝 4、Pangolin安裝 三、配置Mask_RCNN環境 四、DynaSLAM編譯 五、DynaSLAM運行 一、安裝Anaconda 打開以下鏈接&#xff1a; Index of / 下載和自己系統匹配的安裝包。這里下…

X86 RouterOS 7.18 設置筆記三:防火墻設置(IPV4)

X86 j4125 4網口小主機折騰筆記五&#xff1a;PVE安裝ROS RouterOS X86 RouterOS 7.18 設置筆記一&#xff1a;基礎設置 X86 RouterOS 7.18 設置筆記二&#xff1a;網絡基礎設置(IPV4) X86 RouterOS 7.18 設置筆記三&#xff1a;防火墻設置(IPV4) X86 RouterOS 7.18 設置筆記四…