leetcode3 無重復字符最長子串

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

示例?1:

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

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

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

思路:

一個set記錄i到j遇到的所有字母。

兩個指針,符合條件就更新答案,并且右指針向右。

不符合就刪除左指針相應的值,?并繼續嘗試。

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length();Set<Character> set = new HashSet<>();int ans = 0, i = 0, j = 0;while (i < n && j < n) {// try to extend the range [i, j]if (!set.contains(s.charAt(j))){set.add(s.charAt(j++));ans = Math.max(ans, j - i);}else {set.remove(s.charAt(i++));}}return ans;}
}

優化

第一:可以用map記錄一下遇到的char的下標是多少,這樣我們縮i的時候不用一個一個縮,而是直接到該去的位置

第二:可以不用map,因為字符種類有限,用數組記錄(桶排序思想)

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;int[] index = new int[128];for (int j = 0, i = 0; j < n; j++) {i = Math.max(index[s.charAt(j)], i);ans = Math.max(ans, j - i + 1);index[s.charAt(j)] = j + 1;}return ans;}
}

?

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

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

相關文章

如何正確編寫linux守護進程

1、守護進程&#xff0c;也就是通常說的Daemon進程&#xff0c;是Linux中的后臺服務進程。它是一個生存期較長的進程&#xff0c;通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。如果想讓某個進程不因為用戶或終端或其他地變化而受到影響&#xff0c;那…

Linux(6)-命令行的使用,history,shell腳本

命令行的使用,shell腳本1.終端shell,man1.1 Ctrlr--匹配查找歷史命令1.2 history [n] --列出歷史命令1.3&#xff01;--執行歷史命令2.shell 編程2.1 shell腳本2.2 注釋2.3 指明所用的shell2.4 支持函數2.5 使用變量2.6 解析命令行參數2.7 if, for, case, while2.8 shell腳本中…

lua元表的理解

元表概念 &#xff08; Metatable&#xff09;元表由鍵名為 事件 (event) 和其中的值叫作元方法 (metamethod)組成。在lua中每個值都有一個元表。而table和userdata所定義的值允許自定義對應的元表&#xff0c;其他都是用統一的元表。我的理解&#xff0c;元表&#xff0c;其實…

程序以及論文

本人長期承接大學計算機專業的畢業設計和論文的編寫。 主要開發語言C&#xff0c;C &#xff08;windows或linux平臺皆可&#xff09;&#xff0c;php&#xff0c;c#&#xff0c;VC 。 課題內容可以是 管理系統&#xff0c;可以是 網站設計開發 可以是 網絡聊天 可以是 應用…

Github(1)-概覽,初始化倉庫

Github網頁-本地git1.github網頁1.1 主要界面1.1.1github主頁1.1.2倉庫主頁1.1.3 個人頁面1.2 注冊github賬號1.3 新建平臺倉庫2.git-本地倉庫2.1 git本地倉庫的三個區域2.2 創建一個本地倉庫GitHub 本質上是一個代碼托管平臺&#xff0c;它提供的是基于 Git 的代碼托管服務。G…

Lua 協程

Lua里的協程是一個原來沒見過的東西&#xff0c;Python的Gevent也是一個基于coroutine的python網絡開發框架。性能據說很不錯。協同的一個關鍵特征是它可以不斷顛倒調用者與被調用者之間的關系協程和一般多線程的區別是&#xff0c;一般多線程由系統決定該哪個線程執行&#xf…

leetcode16 最接近的三數之和

給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數&#xff0c;使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 例如&#xff0c;給定數組 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 target 1…

LINUX下動態鏈接庫的使用-dlopen dlsym dlclose dlerror

dlopen 基本定義   功能&#xff1a;打開一個動態鏈接庫 包含頭文件&#xff1a; #include <dlfcn.h> 函數定義&#xff1a; void * dlopen( const char * pathname, int mode ); 函數描述&#xff1a; 在dlopen的&#xff08;&#xff09;函數以指定模式打開指定的動…

leecode11 盛水最多的容器

給定 n 個非負整數 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線&#xff0c;垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多…

Github(2)-本地配置git

本地配置git1.注冊賬號2.安裝git工具3.配置git 賬號1.注冊賬號 github網頁注冊github賬戶 2.安裝git工具 本地安裝git工具 step1 查看是否安裝git git version step2 mac 安裝 brew install git step2 linux安裝 sudo apt-get install git 3.配置git 賬號 創建ssh key, 配置…

lua面向對象編程之點號與冒號的差異詳細比較

首先,先來一段在lua創建一個類與對象的代碼 Class {}Class.__index Classfunction Class:new(x,y)local temp {}setmetatable(temp, Class)temp.x xtemp.y yreturn tempendfunction Class:test()print(self.x,self.y)endobject Class.new(10,20)object:test() 猜一下會輸…

lua __index __newindex upvalue 示例

項目中有個公會對象&#xff0c;數據大部分存在data中&#xff0c;之前都是 u.data.point這樣訪問&#xff0c;太麻煩了。 于是通過設置__index 使之可以直接訪問屬性&#xff0c;u.point。 但是還是不能直接改屬性&#xff0c;u.point 4&#xff0c;所以再設置了__newindex…

leecode26 刪除排序數組中的重復項

給定一個排序數組&#xff0c;你需要在原地刪除重復出現的元素&#xff0c;使得每個元素只出現一次&#xff0c;返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數組 nums [1,1,2…

MachineLearning(6)-Daviad Silver強化學習課程脈絡整理

強化學習-Daviad Silver強化學習課程脈絡整理1.lecture1 introduction1.1 強化學習簡介1.2 強化學習類別1.3 強化學習的主要問題2.lecture2 Markov Decision Process2.1 MP,MRP,MDP2.2 Bellman Eqution--貝爾曼方程2.3 Bellman Eqution--貝爾曼期望方程2.4 最優策略2.5 最優值函…

lua的VS或者VC環境的搭建調試

安裝完LuaForWindows_v5.1.4 打開vs tools->options->projects->directories executable files 選項添加lua安裝以后的路徑,我的是 C:\Program Files\Lua\5.1 include files選項添加lua include路徑,我的是 C:\Program Files\Lua\5.1include library files 選項添…

leecode53 最大子序列和

給定一個整數數組 nums &#xff0c;找到一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大&#xff0c;為 6。 思路&#xff1a;…

在頁游中LUA的應用(1)

通常,你希望在你的游戲開始的時候讀取一些信息,以配置你的游戲,這些信息通常都是放到一個文本文件中,在你的游戲啟動的時候,你需要打開這個文件,然后解析字符串,找到所需要的信息。 或許你認為這樣就足夠了,為什么還要使用Lua呢? 應用于“配置”這個目的,Lua提供給你…

Github(3)-本地文件管理

使用github 托管代碼簡單使用教程--本地文件管理1.基本概念2.本地文件管理2.1 git add2.2 git status2.3 git commit2.3 git log2.5 git reset --hard 版本回退2.6 git reflog2.7 git diff2.8 git checkout --file 工作區文件恢復2.9 git rm 刪除版本庫里的文件廖雪峰老師博文學…

linux 中阻塞與非阻塞 同步與異步

簡單點說: 阻塞就是干不完不準回來&#xff0c; 非阻塞就是你先干&#xff0c;我先看看有其他事沒有&#xff0c;完了告訴我一聲。 我們拿最常用的send和recv兩個函數來說吧。比如你調用send函數發送一定的Byte,在系統內部send做的工作其實只是把數據傳輸(Copy)到TCP/IP協議棧…

leecode62 不同路徑

示例 1: 輸入: m 3, n 2 輸出: 3 解釋: 從左上角開始&#xff0c;總共有 3 條路徑可以到達右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右 示例 2: 輸入: m 7, n 3 輸出: 28 思路&#xff1a;太過于簡單&#xf…