当前位置:网站首页>LeetCode #3.无重复字符的最长子串
LeetCode #3.无重复字符的最长子串
2022-07-29 05:24:00 【张楚明ZCM】
题目截图

方法一:暴力法
利用列表。利用列表切片来滑动窗口。
遍历字符串s,不断将字符串的字符添加到列表中。
如果发现字符串中新的元素在前面的列表中有,立刻使用切片,使切片的开头切在重复元素的后一位,然后添加那个重复的元素(此时已经把重复的部分切掉了),再继续往下遍历。
每一次添加都比较长度,选择长度大的那个,最后返回最大子串长度。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
a = []
res = 0
for i in s:
if i in a:
a = a[a.index(i)+1:]
a.append(i)
res=res if len(a)< res else len(a)
return resres可以直接用max()函数
res = max(res, len(a))完整测试代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
a = []
res = 0
for i in s:
if i in a:
a = a[a.index(i)+1:]
a.append(i)
res=res if len(a)< res else len(a)
return res
class main():
a = Solution()
s = "abcabcbb"
print(a.lengthOfLongestSubstring(s))
if __name__ == '__main__':
main()方法二:滑动窗口一
set()函数可以创建一个不重复的元素集,可以利用该函数判断是否有重复的部分。
内循环判断新添加的元素是否重复,如果不重复则指针右移,将其加入元素集。如果新加入的元素重复在无法进入循环,跳出循环后进外循环,外循环会删除掉前面的元素,该元素为之前重复的元素。
这样利用左右指针滑动窗口可以找到一系列子字符串,利用max()函数返回无重复最大子字符串。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 哈希集合,记录每个字符是否出现过
occ = set()
n = len(s)
rk, ans = -1, 0
for i in range(n):
if i != 0:
occ.remove(s[i - 1])
while rk + 1 < n and s[rk + 1] not in occ:
occ.add(s[rk + 1])
rk += 1
ans = max(ans, rk - i + 1)
return ans方法三:滑动窗口二
基本思路与上面相同有一点点区别。更容易看懂一点。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
occ = set()
left = 0
max_len, cur_len = 0, 0
n = len(s)
for i in range(n):
cur_len += 1
while s[i] in occ:
occ.remove(s[left])
left += 1
cur_len -= 1
max_len = max(max_len, cur_len)
occ.add(s[i])
return max_len边栏推荐
- mavan中的plugin位置
- Hal library learning notes-14 ADC and DAC
- FPGA based: moving target detection (schematic + source code + hardware selection, available)
- 【软件工程之美 - 专栏笔记】13 | 白天开会,加班写代码的节奏怎么破?
- QT learning notes QT model/view
- Am model in NLP field
- TLE5012b+STM32F103C8T6(bluepill)读取角度数据
- Pit avoidance: about the interconnection of two hc-05 master-slave integrated Bluetooth modules, there is no connection problem
- 【软件工程之美 - 专栏笔记】30 | 用好源代码管理工具,让你的协作更高效
- DP1332E 多协议高度集成非接触式读写芯片
猜你喜欢

【软件工程之美 - 专栏笔记】“一问一答”第2期 | 30个软件开发常见问题解决策略

【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?

shell工具finalShell

【软件工程之美 - 专栏笔记】14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决

【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?

【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?

基于51单片机的直流电机调速系统(L298的使用)

【软件工程之美 - 专栏笔记】13 | 白天开会,加班写代码的节奏怎么破?

From entry to soul: how to use tb6600 single chip microcomputer to control stepping motor with high precision (42/57)

【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识
随机推荐
【软件工程之美 - 专栏笔记】“一问一答”第2期 | 30个软件开发常见问题解决策略
【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?
【软件工程之美 - 专栏笔记】21 | 架构设计:普通程序员也能实现复杂系统?
Design and implementation of QT learning notes data management system
2022 spring recruit - Hesai technology FPGA technology post (one or two sides, collected from: Digital IC workers and FPGA Explorers)
充电桩应用方案
八大排序-----------快速排序
Hal library learning notes-12 SPI
HAL库学习笔记- 8 串口通信之使用
Torch. NN. Parameter() function understanding
2022 spring recruit - Shanghai an road FPGA post Manager (and Lexin SOC interview)
shell工具finalShell
ArduinoIDE + STM32Link烧录调试
【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议
充电桩充电技术新能源充电桩开发
ML7 self study notes
2022 spring move - core technology FPGA development post pen test question (original question and experience)
从头安装MYSQL(MYSQL安装文档-解压版)
Huawei cloud 14 day Hongmeng device development -day7wifi function development
DP4301—SUB-1G高集成度无线收发芯片