【算法專題】滑動窗口—無重復字符的最長子串

力扣題目鏈接:無重復字符的最長子串

一、題目解析

二、算法原理

解法一:暴力解法(時間復雜度最壞:O(N))

從每一個位置開始往后枚舉,在往后尋找無重復最長子串時,可以利用哈希表來統計字符出現的頻率,如果出現了重復字符就跳出循環,如果沒有重復則更新結果,這樣枚舉下去找到長度最長的返回即可。

解法二:滑動窗口

?滑動窗口也是定義了兩個指針在移動,但是這兩個指針所指向的區間就像一個滑動的窗口一樣。

滑動窗口的基本步驟

  • 定義兩個指針int left=0,right=0;
  • 進入滑動窗口——>讓字符進入哈希表
  • 判斷條件——>窗口內出現重復字符
  • 出滑動窗口——>從哈希表中將字符刪除
  • 更新結果

:結果的更新不一定是放在最后,這個要根據題目的要求進行相應的改變,而且判斷條件是要循環一直判斷,如果滿足就出窗口,不滿足條件循環才停止。

?

?每次移動指針的時候結果都在更新,所以結果不會出錯。

時間復雜度:雖然代碼是兩層循環,但是left指針和right指針都是不回退的,兩者最多都往后移動n次。因此時間復雜度是O(N)。

這個題最大的難度是怎么分析這個問題從而想到要用滑動窗口來解決。?

三、代碼編寫

暴力枚舉

class Solution {
public:int lengthOfLongestSubstring(string s) {int ret = 0;int n = s.size();for(int i = 0; i < n; i++){int hash[128] = {0};//用數組模擬哈希表,統計次數for(int j = i; j < n; j++){hash[s[j]]++;if(hash[s[j]] > 1)//判斷是否重復break;ret = max(ret, j - i + 1);//更新結果}}return ret;}
};

滑動窗口?

class Solution {
public:int lengthOfLongestSubstring(string s) {int ret = 0;int left = 0, right = 0, n = s.size();int hash[128] = {0};//用數組來模擬哈希表while(right < n){hash[s[right]]++;//進窗口while(hash[s[right]] > 1)//判斷{hash[s[left++]]--;//出窗口}ret = max(ret, right - left + 1);//更新結果right++;}return ret;}
};

如有錯誤或不足歡迎大家批評指正。

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

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

相關文章

手機APP-MCP走藍牙無線遙控智能安全帽~執法記錄儀~拍照錄像,并可做基礎的配置,例如修改服務器IP以及配置WiFi等

手機APP-MCP走藍牙無線遙控智能安全帽~執法記錄儀~拍照錄像,并可做基礎的配置,例如修改服務器IP以及配置WiFi等 手機APP-MCP走藍牙無線遙控智能安全帽~執法記錄儀~拍照錄像,并可做基礎的配置,例如修改服務器IP以及配置WiFi等&#xff0c; AIoT萬物智聯&#xff0c;智能安全帽…

Java 文件操作

文章目錄 Java 文件操作構造方法文件屬性操作文件內容操作InputStreamReaderOutputStreamWriter 更多案例文件查找普通文件的復制 Java 文件操作 Java 中通過 java.io.File 類來對文件進行描述。 構造方法 構造方法說明File(String pathname)通過路徑名字符串來創建 File 實…

JVM之jvisualvm多合一故障處理工具

jvisualvm多合一故障處理工具 1、visualvm介紹 VisualVM是一款免費的&#xff0c;集成了多個 JDK 命令行工具的可視化工具&#xff0c;它能為您提供強大的分析能力&#xff0c;對 Java 應 用程序做性能分析和調優。這些功能包括生成和分析海量數據、跟蹤內存泄漏、監控垃圾回…

SpringBoot:異步任務基礎與源碼剖析

官網文檔&#xff1a;How To Do Async in Spring | Baeldung。 Async注解 Spring框架基于Async注解提供了對異步執行流程的支持。 最簡單的例子是&#xff1a;使用Async注解修飾一個方法&#xff0c;那么這個方法將在一個單獨的線程中被執行&#xff0c;即&#xff1a;從同步執…

系列六、Spring整合單元測試

一、概述 Spring中獲取bean最常見的方式是通過ClassPathXmlApplicationContext 或者 AnnotationConfigApplicationContext的getBean()方式獲取bean&#xff0c;那么在Spring中如何像在SpringBoot中直接一個類上添加個SpringBootTest注解&#xff0c;即可在類中注入自己想要測試…

java反序列化漏洞詳解

java反序列化漏洞 文章目錄 java反序列化漏洞漏洞原理漏洞評級漏洞危害漏洞驗證漏洞防御典型案例 漏洞原理 由于java開發人員在編寫代碼時重寫了 readObject 方法&#xff0c;在重寫的 readObject 方法中調用其他函數實現鏈式調用最終調用到了危險函數&#xff0c;從而形成反序…

【C++】泛型編程 ? ( 類模板示例 - 數組類模板 | 自定義類中持有指針成員變量 )

文章目錄 一、支持 數組類模板 存儲的 自定義類1、可拷貝和可打印的自定義類2、改進方向3、改進方向 - 構造函數4、改進方向 - 析構函數5、改進方向 - 重載左移運算符6、改進方向 - 重載拷貝構造函數 和 等號運算符 二、代碼示例1、Array.h 頭文件2、Array.cpp 代碼文件3、Test…

[網鼎杯 2020 朱雀組]phpweb

看一下源碼 應該是輸入的date 作為函數&#xff0c;value作為內部參數的值&#xff0c;將date()函數返回的結果顯示在頁面上 回去看的時候&#xff0c;意外發現頁面有了新的跳轉&#xff0c;觀察一下發現&#xff0c;頁面每隔五秒就會發生一次跳轉 所以就抓包看看 抓包發現po…

GEE:kNN(k-最近鄰)分類教程(樣本制作、特征添加、訓練、精度、最優參數、統計面積)

作者:CSDN @ _養樂多_ 本文將介紹在Google Earth Engine (GEE)平臺上進行kNN(k-最近鄰)分類的方法和代碼,其中包括制作樣本點教程(本地、在線和本地在線混合制作樣本點,合并樣本點等),加入特征變量(各種指數、紋理特征、時間序列特征、物候特征等),運行kNN(k-最近…

Linux中,查看Tomcat版本、如何查看Tomcat版本

方法 在tomcat的bin目錄下&#xff0c;執行version.sh命令即可 結果

python每日一題——3最長連續序列

題目 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1&#xff1a; 輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&#xf…

RpcServiceContext上下文

消費者: web 提供者: buss-service 同一服務器: 192.168.100.228 RpcServiceContext serviceContext RpcContext.getServiceContext(); //web->buss-serviceLOGGER.warn("getRequest->{}", JsonUtil.toJson(serviceContext.getRequest())); //getRequest-…

ElementUI table+dialog實現一個簡單的可編輯的表格

table組件如何實現可編輯呢&#xff1f; 我的需求是把table組件那樣的表格&#xff0c;實現它點擊可以彈出一個框&#xff0c;然后在這個框里面輸入你的東西&#xff0c;然后將他回顯回去&#xff0c;當然&#xff0c;輸入的有可能是時間啥的。 為什么要彈出彈層不在框上直接…

最近iphone手機的交管12123閃退,打不開的解決辦法?

蘋果手機系統和新版軟件不配&#xff0c;終極決絕辦法&#xff1a;升級IOS系統就好 可能是手機的內存不足了&#xff0c;因為在使用APP時&#xff0c;需要占用手機的內存&#xff0c;如果手機內存不足以支持軟件允許&#xff0c;軟件就會閃退。車主可以清理一下手機的內存&…

彈窗msvcp140_1.dll丟失的解決方法,超簡單的方法分享

在計算機使用過程中&#xff0c;我們經常會遇到一些錯誤提示&#xff0c;其中最常見的就是缺少某個文件的錯誤。最近&#xff0c;我在使用某些軟件時&#xff0c;遇到了一個名為“msvcp140_1.dll”的錯誤提示。這個錯誤通常出現在運行某些程序時&#xff0c;由于缺少了msvcp140…

項目總結報告(案例模板)

軟件項目總結報告模板套用&#xff1a; 項目概要項目工作分析經驗與教訓改進建議可納入的項目過程資產 --------進主頁獲取更多資料-------

2023年【汽車駕駛員(中級)】最新解析及汽車駕駛員(中級)試題及解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年汽車駕駛員&#xff08;中級&#xff09;最新解析為正在備考汽車駕駛員&#xff08;中級&#xff09;操作證的學員準備的理論考試專題&#xff0c;每個月更新的汽車駕駛員&#xff08;中級&#xff09;試題及解…

Doris中的物化視圖-查詢(十九)

物化視圖創建完成后&#xff0c;用戶的查詢會根據規則自動匹配到最優的物化視圖。 比如我們有一張銷售記錄明細表&#xff0c;并且在這個明細表上創建了三張物化視圖。一個存儲了不同時間不同銷售員的售賣量&#xff0c;一個存儲了不同時間不同門店的銷售量&#xff0c;以及每…

C#,《小白學程序》第二課:數組,循環與排序

1 什么是數組&#xff1f; 數組 Array 是一組數值&#xff08;數 或 值&#xff09;。 int[] a; int[,] b; int[][] c; Anything[] d; 都是數組。 2 排序 排序就是按大小、名字、拼音或你指定的信息進行比較后排隊。 排序是數組最基本的功能需求。 3 文本格式 /// <summa…

《數據結構、算法與應用C++語言描述》-代碼實現散列表(線性探查與鏈式散列)

散列表 完整可編譯運行代碼&#xff1a;Github:Data-Structures-Algorithms-and-Applications/_22hash/ 定義 字典的另一種表示方法是散列&#xff08;hashing&#xff09;。它用一個散列函數&#xff08;也稱哈希函數&#xff09;把字典的數對映射到一個散列表&#xff08…