今天的題目是第3題,medium難度.
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
3. 無重復字符的最長子串
給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 "abc", 所以其長度為3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為3。請注意,你的答案必須是 子串 的長度,"pwke"是一個子序列,不是子串。
My answer:
首先對于查詢是否存在的操作我們選擇用dict來做(hash速度快), 對整個字符串進行遍歷 用dict字典中存儲已經訪問過的數據. 對于未存在于dict中的元素直接添加key:value為s[i]:i; 當遇到已經存在的元素更新start的位置為dict[s[i]]的下一位, 因為dict中的值仍然保留start之前的數元素, 所以遇到的存在元素未必是有效的, 需要對start的更新值進行判斷start = max(start, dct[s[i]] + 1). 最后更字典和最大長度即可.
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
start = 0
max_len = 0
dct = {}
for i in range(len(s)):
if s[i] in dct:
start = max(start, dct[s[i]] + 1)
dct[s[i]] = i
max_len = max(max_len, i - start+1)
return max_len
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
字符串
+關注
關注
1文章
577瀏覽量
20485 -
字典
+關注
關注
0文章
13瀏覽量
7696 -
Start
+關注
關注
0文章
73瀏覽量
10243
發布評論請先 登錄
相關推薦
重點介紹所有綜合編譯器都支持的for和repeat循環
循環語句允許多次執行編程語句或begin-end語句組。SystemVerilog中的循環語句有:for、repeat、while、do..while、foreach和forever。
Labview8.5版本 關于write characters to file VI的問題
`是不是Labview8.5版本 沒有write characters to file 這個函數啊,我在清華教程里面看到使用這個函數的例子,怎么在8.5版本上找不到這個函數呢?奇怪。`
發表于 03-14 19:45
Linux Shell系列教程之Shell字符串用法
:position:length}在$string中, 從位置$position開始提取長度為$length的子串${string#substring}從變量$string的開頭, 刪除最短匹配
發表于 08-29 16:01
AD09多通道設計如何批量給Sheet Entry 加Repeat
AD多通道設計時,需要將Sheet Symbol中的各Sheet Entry加Repeat,現在都是手動加的,請問有沒有可以批量的方法?
發表于 10-09 09:02
將字符添加到Wildcard Characters時,在屏幕上看不到這些字母怎么處理?
當我將字符添加到 Wildcard Characters 時,我在屏幕上看不到這些字母。我怎么辦?
發表于 12-15 06:31
EFUSE_RD_REPEAT_ERR4_REG的正確地址是什么?
好像是不同ESP-*芯片的EFUSE_RD_REPEAT_ERR4_REG地址有些不一致。例如,對于 ESP32-S3,TRM 將 EFUSE_RD_REPEAT_ERR4_REG 列為寄存器摘要表
發表于 04-11 06:55
PCF2113x LCD控制器驅動器數據手冊
display of 2 lines of 12 characters or 1 line of 24 characters with 5 ´ 8 dotformat. All necessary functions for the display are
發表于 03-10 16:53
?15次下載
簡談FPGA verilog中的repeat用法與例子
????? ?大家好,又到了每日學習的時間了,今天我們來聊一聊FPGA verilog中的repeat用法與例子。? ? ? ?repeat 循環語句執行指定循環數,如果循環計數表達式的值不確定
用獨特手勢控制空間中的可播放角色
This video shows gameplay from each of the five different playable characters in Space Between.
TensorFlow中讀數據三種方法
repeat將整個序列重復多次,只用用來處理epoch。如果直接調用repeat()的話,生成的序列就會無限重復下去,沒有結束,因此也不會拋出。tf.errors.OutOfRangeError異常:
Longest Palindromic Substring
回文字符串, 是正讀反讀都一樣的字符串。比較直接的方法是在每個字符位置上向前和向后搜索找到回文字符串。其中,對于搜索時需要對奇數位和偶數位兩種形式進行探索,奇數位以當前位置的字符為中心;偶數位以當前位置和其相鄰一個位置的兩個字符為中心向兩邊拓展。
verilog中repeat必須用begin和end嗎
在Verilog中,repeat語句不需要使用begin和end塊。repeat語句是一種循環控制語句,允許重復執行一個代碼塊指定的次數。它的一般語法如下: repeat (n) statement
評論