leetcode面試經典150題——31 無重復字符的最長子串(方法二極簡代碼!!!)

題目: 無重復字符的最長子串

描述
給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:

輸入: s = “abcabcbb”
輸出: 3
解釋: 因為無重復字符的最長子串是 “abc”,所以其長度為 3。
leetcode鏈接

方法一:滑動窗口(雙指針)
設定兩個指針left和right指向最長子串的頭部和尾部的下一個元素,left和right初始分別為0和1,對于right指向的每一個元素我們都在前面left和right區間內尋找是否出現過,若未出現過,則把它加入子串中,,right指針右移,若出現過,left指針移動到出現的元素后一個位置,right指針移動到出現的元素后兩個位置,最后再更新最長子串的長度
時間復雜度:o(n2) 需要遍歷一遍字符串的時間復雜度為o(n),對于每一個新加入的元素都需要進行查找操作,時間復雜度為o(n),因此總時間復雜度為o(n2)
空間復雜度:o(1) 都在原字符串上進行操作,無需占用新的內存空間

int lengthOfLongestSubstring(string s) {int n = s.size();if(n==1){//字符串只有一個元素,那么最長無重復子串長度也為1return 1;}int left = 0,right = 1;int maxLen = 0;while(right<n){int i = left;//在子串中查找相同的元素while(s[right]!=s[i]&&i<right){i++;}if(i==right){//沒有相同的元素則加入子串中right++;}else{left = i+1;right = i+2;}//更新最大的子串長度maxLen = max(maxLen,right-left);}return maxLen; 
}

方法二:滑動窗口+哈希表判斷重重復元素
對于方法一中我們判斷重復元素需要遍歷一遍子數組,時間復雜度為o(n),因此我們考慮用哈希表來優化查找重復元素的時間,我們把子數組的每一個元素存儲到哈希表中,哈希表查找的時間復雜度為o(1),同樣的我們定義兩個指針left和right,left
指向子數組的起始位置,right指向待加入的元素,然后我們利用count()判斷right指向的元素是否在子數組中存在,如果不存在,那么加入哈希表中,如果存在刪除哈希表中鍵為s[left]的元素,然后left右移動,循環此操作直到right指向的元素在子數組中不出現為止,最后維護最大的子數組長度。
時間復雜度:o(n)left,right指針均只會向右移動,遍歷一遍字符串,時間復雜度為o(n)
空間復雜度:o(n)哈希表的空間為o(n)

int lengthOfLongestSubstring(string s) {int n = s.size();int left = 0,right = 0;int maxLen = 0;unordered_map<char,int> map;while(right<n){while(left<right&&map.count(s[right])){//刪除有重復字符的子串直至不出現重復的字符map.erase(s[left++]);}//把right指向的元素當成關鍵字插入mapmap[s[right++]] = 0;maxLen = max(maxLen,right-left);}return maxLen;}

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

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

相關文章

【LeetCode刷題筆記】DFSBFS(三)

圖的基礎知識 鄰接矩陣是一個二維表,其中橫縱坐標交叉的格子值為 1 的表示這兩個頂點是連通的,否則是不連通的。

Python-csv庫進行數據保存和讀寫

在 Python 中使用 CSV 文件非常簡單&#xff0c;Python 提供了內置的 csv 模塊來處理 CSV 文件。你可以使用 csv 模塊來讀取、寫入和操作 CSV 文件中的數據。 基礎使用 讀取 CSV 文件 python import csv# 打開 CSV 文件進行讀取 with open(file.csv, moder) as file:reader …

NVM得介紹和詳細使用教程

NVM???????&#xff08;Node Version Manager&#xff09;是一個用于管理多個Node.js版本的工具。它允許您在同一臺計算機上輕松地切換和管理不同的Node.js版本。以下是NVM的介紹和詳細使用教程&#xff1a; 安裝NVM&#xff1a; 首先&#xff0c;您需要在計算機上安裝N…

C#串口通信從入門到精通(27)——高速通信下解決數據處理慢的問題(20ms以內)

前言 我們在開發串口通信程序時,有時候會遇到比如單片機或者傳感器發送的數據速度特別快,比如10ms、20ms發送一次,并且每次發送的數據量還比較大,如果按照常規的寫法,我們會發現接收的數據還沒處理完,新的數據又發送過來了,這就會導致處理數據滯后,軟件始終處理的不是…

python樹的雙親存儲結構

這種存儲結構是一種順序存儲結構&#xff0c;采用元素形如“[結點值&#xff0c;雙親結點索引]”的列表表示。通常每個結點有唯一的索引(或者偽地址&#xff09;,根結點的索引為0&#xff0c;它沒有雙親結點&#xff0c;其雙親結點的索引為-1。例如&#xff0c;所示的樹對應的雙…

123. 股票買賣的最佳時機III(2次交易)

題目 題解 class Solution:def maxProfit(self, prices: List[int]) -> int:N len(prices)# 狀態定義 dp[i][j][k]代表在第i天&#xff0c;被允許完成j次交易時&#xff0c;持有或者不持有的最大利潤。k0代表不持有&#xff0c;k1代表持有dp [[[0 for k in range(2)] for…

醫學生秋招攻略,面試時一定要注意這些方面!

醫學生別拖了&#xff0c;今年秋招已經過去一波熱度了&#xff0c;趕早不趕晚&#xff01;在籌備第二輪秋招以及明年的春招的醫學生一定要注意以下事項。 1.清晰目標 搜集秋招訊息 一定要早點多做準備&#xff0c;想清楚未來的目標&#xff0c;是繼續深造還是就業做醫生或者是…

FileReader與URL.createObjectURL實現圖片、視頻上傳預覽

之前做圖片、視頻上傳預覽常用的方案是先把文件上傳到服務器&#xff0c;等服務器返回文件的地址后&#xff0c;再把該地址字符串賦給img或video的src屬性&#xff0c;這才實現所謂的文件預覽。實際上這只是文件“上傳后再預覽”&#xff0c;這既浪費了用戶的時間&#xff0c;也…

java開發合同相關

【點我-這里送書】 本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(…

集合的分類

Python內建的集合類&#xff0c;有有序和無序之分&#xff0c;還有可修改和不可修改之分。 1 有序和無序 有序是說某數據集合中的每個元素都有一個位置信息&#xff0c;通常用index表示&#xff0c;可以借助這種集合類型名和位置信息訪問集合里的某元素值&#xff0c;在Pytho…

【開源】基于Vue.js的用戶畫像活動推薦系統

項目編號&#xff1a; S 061 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S061&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S061&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 興趣標簽模塊2.3 活…

[Android]使用Git將項目提交到GitHub

如果你的Mac還沒有安裝Git&#xff0c;你可以通過Homebrew來安裝它&#xff1a; brew install git 方式一&#xff1a;終端管理 1.創建本地Git倉庫 在項目的根目錄下&#xff0c;打開終端&#xff08;Terminal&#xff09;并執行以下命令來初始化一個新的Git倉庫&#xff1…

vue3-組件傳參及計算屬性

?&#x1f308;個人主頁&#xff1a;前端青山 &#x1f525;系列專欄&#xff1a;Vue篇 &#x1f516;人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來vue篇專欄內容:vue3-組件傳參及計算屬性 目錄 vue3中的組件傳參 1、父傳子 2、子傳父 toRef 與 toRefs vue3中…

數據結構 查找基本概念

敬請期待。。。 1. 適用于折半查找的表的存儲方式及元素排列要求為&#xff08;順序方式存儲&#xff0c;元素有序 &#xff09;。 2. 有一個按元素值排好序的順序表(長度大于2)&#xff0c;分別用順序查找和折半查找與給定值相等的元素&#xff0c;比較次數分別是s和b&am…

拼接合并yuv序列轉成mp4

ffmpeg需要用支持libx264的版本&#xff0c;如果需要&#xff0c;可以從這個網站下載編譯支持libx264\x265的ffmpeg https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-6.1-essentials_build.7z #-*- coding:utf-8-*- import osif __name__ "__main__":# 1 輸入…

實例講解:在3dMax中如何使用python腳本?

如果你是Python或Maxscript的新手&#xff0c;你現在可以跟著這篇文章開始做一些代碼了&#xff0c;本文將讓我們從非常基本的東西開始學習。 如何在3dmax中獲取選定的節點并打印出它們的名稱&#xff1f;所有場景對象如何&#xff1f;我們直接看代碼&#xff1a; import MaxP…

Word/PPT/PDF怎么免費轉為JPG圖片?

1、打開金鳴表格文字識別網站。 2、點擊導航條上的“軟件下載” 3、安裝并打開金鳴表格文字識別軟件。 4、點擊頂部導航欄的“文件轉圖片”。 5、選擇需要轉換成圖片的文件&#xff08;支持Word/PPT/PDF&#xff09;. 6、點“打開”程序將自動分頁轉換為圖片。

【論文閱讀筆記】Smil: Multimodal learning with severely missing modality

Ma M, Ren J, Zhao L, et al. Smil: Multimodal learning with severely missing modality[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2021, 35(3): 2302-2310.[開源] 本文的核心思想是探討和解決多模態學習中的一個重要問題&#xff1a;在訓練和測…

【dart線程之怎么處理異步和順序異步任務隊列】

dart線程之怎么處理異步和順序異步任務隊列 單線程的dart怎么處理異步任務的&#xff1f; 事件循環模型就是實現異步處理任務的核心。 關于阻塞式調用和非阻塞式調用的概念 阻塞和非阻塞關注的是程序在等待調用結果&#xff08;消息、返回值&#xff09;時的狀態阻塞式調用…

JS中的OOP

JS中的OOP OOP 為我們解決了什么問題&#xff1f;想象一下&#xff0c;我們希望為教師提供一個平臺&#xff0c;每位注冊的教師都可以提交分數&#xff0c;并為課程分配作業和其他內容。 如果有一個地方&#xff08;在本例中是一個對象&#xff09;&#xff0c;可以訪問所有教…