1 题目描述

2 解题思路

以字符串 abcabcbb 为例,找出从每一个字符开始的,不包含重复字符的最长子串,那么其中最长的那个字符串即为答案。

我们列举出这些结果,其中括号中表示选中的字符以及最长的字符串:

以 (a)bcabcbb 开始的最长字符串为(abc)abcbb;
以 a(b)cabcbb 开始的最长字符串为a(bca)bcbb;
以 ab(c)abcbb 开始的最长字符串为ab(cab)cbb;
以 abc(a)bcbb 开始的最长字符串为abc(abc)bb;
以 abca(b)cbb 开始的最长字符串为abca(bc)bb;
以 abcab(c)bb 开始的最长字符串为abcab(cb)b;
以 abcabc(b)b 开始的最长字符串为abcabc(b)b;
以 abcabcb(b) 开始的最长字符串为abcabcb(b)。

如果我们依次递增地枚举子串的起始位置,那么子串的结束位置也是递增的。

这里的原因在于,假设我们选择字符串中的第 k 个字符作为起始位置,并且得到了不包含重复字符的最长子串的结束位置为 rk。那么当我们选择第 k+1个字符作为起始位置时,首先从 k+1到rk的字符显然是不重复的,并且由于少了原本的第 k 个字符,我们可以尝试继续增大rk,直到右侧出现了重复字符为止。

这样一来,我们就可以使用「滑动窗口」来解决这个问题了。但我们不用每个滑动窗口的起始坐标都需要遍历一遍。每当我们需要重复的字符时,我们下一个滑动窗口的起始坐标为重复的字符的后一个字符。

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:L = len(s)if L<2:return L#如果原字符串的长度小于2的话,直接返回原字符串的长度即可head = 0 #滑动窗口的头tail = 1 #滑动窗口的尾# 设置初始窗口大小为1 [0,1)cnt = 1 # 最长字串的长度while tail<L:while tail<L and s[tail] not in s[head:tail]:tail += 1#如果当前子串中没有重复元素,那么滑动窗口的尾不断向后甩cnt = max(cnt, tail-head)#看当前滑动窗口的长度是否可以更新最大值if tail != L:# 计算头指针的移动步数head =head+ s[head:tail].index(s[tail])+1#head+ s[head:tail].index(s[tail])——找到目前重复子串重复的那个字符第一次在这个子串中出现的下标#+1 下一个字符开始遍历return cnt

文巾解题3. 无重复字符的最长子串相关推荐

  1. leetcode 刷题 3. 无重复字符的最长子串解题思路

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3  解释: 因为无重复字符的最长子串是 "abc&q ...

  2. 汇编语言求无符号数组中出现的次数最多数_【今日最佳leecode通俗易懂】无重复字符的最长子串...

    相信看了这个标题的同学,对这道题以已经非常不陌生了,就是leecode当中的第三题,之所以要单独的写一写主要对我来说,里面涉及到有一个滑动窗口, 散列表, 字符编码等知识点比较重要,也有几个小技巧,这 ...

  3. python字符串中最长的连续升序子串_Leetcode刷题练Python无重复字符的最长子串

    这是一道字符串处理算法的题目,在日常编程中,处理字符串是常见任务.该题目会涉及到一个概念"滑动窗口". 一.题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 ...

  4. c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”

    文章来源: 饭饭的Python学习之路 作者: 一粒米饭 今天要挑战的是"无重复字符的最长子串". 难度:中等 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 ...

  5. LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)

    1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  6. LeekCode3_无重复字符的最长子串(中等)

    题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  7. 【无重复字符的最长子串--三种方法】

    目录: 前言 一.题目 --无重复字符的最长子串 (一)双层循环 1.题目分析 2.图解 3.示例 (二)滑动窗口 1.题目分析 2.图解 3.示例 (三)滑动窗口--改进 1.题目分析 2.图解 3 ...

  8. 利用滑动窗口法解决无重复字符的最长子串

    无重复字符的最长子串 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...

  9. 无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3  解释: 因为无重复字符的最长子串是 "abc&q ...

最新文章

  1. html 表单内容怎么获取不到,jquery中formdate一直获取不到对象中的[0]的值 包括本身也是一个空的数据怎么办?...
  2. 建立实体-关系模型3
  3. 2021年广东赛区线上比赛高校组合点-五邑大学
  4. 第二课 壳的介绍以及脱壳常用思路
  5. 【库】/lib64/libc.so.6: version `GLIBC_2.14' not found问题
  6. autocad .net开发指南_就业指南||职路明灯(二十)
  7. 传闻称马斯克从创始人手中偷走了特斯拉公司,马斯克回击...
  8. SpringCloud工作笔记052---SpringCloud打包部署流程_打包时报错: BeanCreationNotAllowedException: Error creating bean w
  9. 斯坦福吴恩达《机器学习》--增强学习
  10. kafka彻底删除topic清理数据
  11. 如何在第三方平台或系统中引入外源邮箱:126邮箱、QQ邮箱
  12. JFinal和JBoot创建一个定时任务
  13. spss python_ARIMA模型 - [SPSS Python]
  14. 第五章: 项目范围管理
  15. BottomBarLayout——方便快捷地实现底部导航栏
  16. linux基础(四):shell简单命令;文件系统命令,系统操作命令,文本操作命令;文本处理命令
  17. 怎样成为解决问题的高手?七步成诗:麦肯锡解决问题七步法
  18. 图论---tarjan
  19. zzun 2076 : 三花聚顶神功
  20. echarts看板效果图:流光折线图、3d柱状图、3d饼图、3d地图

热门文章

  1. CSS中background-position的使用
  2. CSP认证201709-1 打酱油[C++题解]:贪心
  3. PAT甲级1137 Final Grading:[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数
  4. Linux 内核源码分析 IPv6报文接收处理流程
  5. 消息服务器怎么测试,如何对服务器性能进行测试
  6. mybitis第三讲:关联查询
  7. 文件服务器 双机,文件服务器双机备份
  8. java.text.dateformat_使用java.text.SimpleDateFormat类进行文本日期和Date日期的转换
  9. python调用pyd_Python生成pyd文件
  10. mysql 相除 取整数位,psql除法保留小数,实现向上取整和向下取整操作_PostgreSQL_数据库...