【LeetCode熱題100】【滑動窗口】無重復字符的最長子串

給定一個字符串?s?,請你找出其中不含有重復字符的?最長子串?的長度。

示例?1:

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

示例 2:

輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是?"wke",所以其長度為 3。請注意,你的答案必須是 子串 的長度,"pwke"?是一個子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 104
  • s?由英文字母、數字、符號和空格組成

題解

首先是我自己的思路,因為比較直接所以比較暴力

遍歷字符串的每個字符,按照當前無重復字符的字串的長度提取子串,在字串中尋找是否有相同的字符,如果有相同的字符,更新子串的起始字符為相同字符的后面一個字符,同時更新當前字串的長度

這里尋找相同字符的位置比較講究,首先找出相同字符在子串的位置,再加上字串在字符串中的位置,之所以用rfind倒著查找是避免存在多個相同字串返回第一個字串的結果,用rfind加上i的位置可以返回正確位置的子串的位置

class Solution {
public:int lengthOfLongestSubstring(string s) {if(s=="")return 0;int longest=1,begin=0,longer=1;string son;for(int i=1;i<s.size();i++){son=s.substr(begin,longer);int newBegin=son.find(s[i]);if(newBegin!=string::npos){newBegin=s.rfind(son,i-1)+newBegin;longer=i-newBegin;begin=newBegin+1;}else{longer++;longest=longest<longer?longer:longest;}}return longest;}
};

下面這個是更加簡潔和優化的寫法,思路還是一樣的

class Solution {
public:int lengthOfLongestSubstring(string s) {int longest=0,begin=0,end=0;while(end<s.size()){for(int i=begin;i<end;i++){ //子串重復判斷if(s[i]==s[end]){begin=i+1; //更新子串起始位置break;}}longest=max(longest,end-begin+1);end++;}return longest;}
};

?

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

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

相關文章

Docker安裝教程

docker官網 1.卸載舊版 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2.配置Docker的yum庫 安裝yum工具 yum install -y yum-utils配置Docker的yum源 yum-config-ma…

Redis,什么是緩存穿透?怎么解決?

Redis&#xff0c;什么是緩存穿透&#xff1f;怎么解決&#xff1f; 1、緩存穿透 一般的緩存系統&#xff0c;都是按照key去緩存查詢&#xff0c;如果不存在對用的value&#xff0c;就應該去后端系統查找&#xff08;比如DB數據庫&#xff09;。一些惡意的請求會故意查詢不存在…

不想寫大量 if 判斷?試試用規則執行器優化,就很絲滑!

近日在公司領到一個小需求&#xff0c;需要對之前已有的試用用戶申請規則進行拓展。我們的場景大概如下所示: if (是否海外用戶) {return false; }if (刷單用戶) {return false; }if (未付費用戶 && 不再服務時段) {return false }if (轉介紹用戶 || 付費用戶 || 內推…

16ASM 分段和機器碼

8086CPU存儲分段管理 問題1&#xff1a;8086是16位cpu&#xff0c;最多可訪問&#xff08;尋址&#xff09;多大內存&#xff1f; 運算器一次最多處理16位的數據。地址寄存器的最大寬度為16位。訪問的最大內存為&#xff1a;216 64K 即 0000 - FFFF。 問題2&#xff1a;808…

Hadoop集群破壞試驗可靠性驗證

集群環境說明&#xff1a; 準備5臺服務器&#xff0c;hadoop1、hadoop2、hadoop3、hadoop4、hadoop5&#xff1b; 分別部署5個節點的zookeeper集群、hadoop集群、hbase集群 本次對于Hadoop集群測試主要分為五個方面&#xff1a; 手動進行datanode節點刪除&#xff1a;&#…

typedef 與#define 的區別

typedef 與#define 的區別 typedef &#xff1a; 給一個已經存在的數據類型&#xff08;注意&#xff1a;是類型不是變量&#xff09;取一個別名&#xff0c;而非定義一個新的數據類型 #define宏定義&#xff1a; #define宏定義&#xff1a;在預編譯時直接進行簡單的文本替換 舉…

WIFI直連(Wi-Fi P2P)

一、概述 Wifi peer-to-peer&#xff08;也稱Wifi-Direct&#xff09;是Wifi聯盟推出的一項基于原來WIfi技術的可以讓設備與設備間直接連接的技術&#xff0c;使用戶不需要借助局域網或者AP&#xff08;Access Point&#xff09;就可以進行一對一或一對多通信。這種技術的應用…

計算機畢業設計 SpringBoot的樂樂農產品銷售系統 Javaweb項目 Java實戰項目 前后端分離 文檔報告 代碼講解 安裝調試

&#x1f34a;作者&#xff1a;計算機編程-吉哥 &#x1f34a;簡介&#xff1a;專業從事JavaWeb程序開發&#xff0c;微信小程序開發&#xff0c;定制化項目、 源碼、代碼講解、文檔撰寫、ppt制作。做自己喜歡的事&#xff0c;生活就是快樂的。 &#x1f34a;心愿&#xff1a;點…

Xmanager

什么是 XManager Xmanager 是市場上領先的 PC X 服務器&#xff0c;可將X應用程序的強大功能帶入 Windows 環境。 提供了強大的會話管理控制臺&#xff0c;易于使用的 X 應用程序啟動器&#xff0c;X 服務器配置文件管理工具&#xff0c;SSH 模塊和高性能 PC X 服務器。 Xman…

javaScript(六):DOM操作

文章目錄 1、DOM介紹2、DOM&#xff1a;獲取Element對象3、DOM&#xff1a;事件監聽3.1、事件介紹3.2、常見事件3.3、設置事件的兩種方式3.4、事件案例 1、DOM介紹 概念 Document Object Model &#xff0c;文檔對象模型 將標記語言的各個組成部分封裝為對應的對象&#xff1a…

Realme X7 Pro Root 刷機教程

Realme X7 Pro 刷機教程 Just For Fun&#xff0c;最近倒騰了下Realme X7 Pro 刷root。此博客為個人記錄刷機過程&#xff0c;如有機友跟隨本教程操作&#xff0c;請謹慎操作&#xff01;&#xff01;&#xff01; 以下教程真針對Realme X7 Pro&#xff0c;其他版本方法未知&…

springboot(ssm高校競賽管理系統 在線競賽平臺 Java系統

springboot(ssm高校競賽管理系統 在線競賽平臺 Java系統 開發語言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服務器&#xff1a;tomcat 數據庫&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 數…

qt 模型視圖結構

在Qt中&#xff0c;Model、View和Delegate三者之間的關系如下&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;Model是數據的抽象表示&#xff0c;它提供了一種結構化的方式來存儲和管理數據。Model負責維護數據的狀態&#xff0c;并提供接口供其他組件&#xff08…

【Flutter】vs2022上開發flutter

在vs上開發flutter&#xff0c;結果擴展倉庫上沒辦法找到Dart&#xff0c;Flutter。 在 這 搜索Dart時也無法找到插件。 最后發現是安裝工具出錯了 安裝了 開發需要的是

挖漏洞之文件上傳

&#xff08;一&#xff09;漏洞原理 文件上傳漏洞是指由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷&#xff0c;而導致的用戶可以越過其本身權限向服務器上上傳可執行的動態腳本文件。這里上傳的文件可以是木馬&#xff0c;病毒&#xff0c;惡意腳本或者WebShell等。…

從線性回歸到神經網絡

目錄 一、線性回歸關鍵思想 1、線性模型 2、基礎優化算法 二、線性回歸的從零開始實現 1、生成數據集 2、讀取數據集 3、初始化模型參數 4、定義模型 5、定義損失函數 6、定義優化算法 7、訓練 三、線性回歸的簡潔實現 1、生成數據集 2、讀取數據集 3、定義模型…

論文代碼閱讀:TGN模型訓練階段代碼理解

文章目錄 [toc] TGN模型訓練階段代碼理解論文信息代碼過程手繪代碼訓練過程compute_temporal_embeddingsupdate_memoryget_raw_messagesget_updated_memoryself.message_aggregator.aggregateself.memory_updater.get_updated_memoryMemoryget_embedding_moduleGraphAttentionE…

什么是W3C標準? 什么要遵循?

Hi i,m JinXiang ? 前言 ? 本篇文章主要介紹HTML5中W3C的標準&#xff0c;需要遵循的規則以及部分理論知識 &#x1f349;歡迎點贊 &#x1f44d; 收藏 ?留言評論 &#x1f4dd;私信必回喲&#x1f601; &#x1f349;博主收將持續更新學習記錄獲&#xff0c;友友們有任何問…

【AIGC】Midjourney高級進階版

Midjourney 真是越玩越上頭&#xff0c;真是給它的想象力跪了~ 研究了官方API&#xff0c;出一個進階版教程 命令 旨在介紹Midjourney在Discord頻道中的文本框中支持的指令。 1&#xff09;shorten 簡化Prompt 該指令可以將輸入的Prompt為模型可以理解的語言。模型理解語言…

Git初學入門指令

git基本指令 初始化&#xff1a; git init查看狀態&#xff1a; git status新建文件&#xff1a; touch <filename>加入暫存區&#xff1a; git add . 或者 git add -A 表示全部加入暫存區 git add <filename>單個文件加入暫存區加入倉庫&#xff1a; …