今天的题目是第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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网
网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
字符串
+关注
关注
1文章
578浏览量
20505 -
字典
+关注
关注
0文章
13浏览量
7700 -
Start
+关注
关注
0文章
73浏览量
10281
发布评论请先 登录
相关推荐
重点介绍所有综合编译器都支持的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
评论