makcooo 2019-04-19 15:47:32  271  收藏
分类专栏: python
版权
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

原理:记下每个元素的起始位置,默认为-1

如果没有重复,当前位置减去起始位置就是长度。

最大更新一下。

发现一个元素重复,则起始位置更新。

start:子串开始位置,默认为-1,如果出现重复字符,则更新到最后一次出现位置。


class Solution:def lengthOfLongestSubstring(self, s_str):start_dict = {}#建立一个开始字典start, max_len = -1, 0for index in range(len(s_str)):if s_str[index] in start_dict:start = max(start_dict[s_str[index]], start) #i是目前正在计算的最长字串的起点位置max_len = max(max_len, index - start )print(index, s_str[index], "max_len", max_len, start_dict,start)start_dict[s_str[index]] = index #输入 s[j] :jreturn max_len,start_dict""" j 表示子串终止位置,i表示字串起始位置 当未出现重复时,字符串的长度即为字符串的结束位置减去起始位置。发生重复时,重新利用字符串的结束位置j减去新的起始位置i,并与之前的未重复字串的长度作比较取较大者"""if __name__ == '__main__':sss="aba"bbb,start_dict=Solution().lengthOfLongestSubstring(sss)print("str_len",len(sss),bbb)print(start_dict)

原理:使用哈希表存储键值对(key:字符,value:该字符最后一次出现的后一个位置),遍历字符串,若当前字符在哈希表中,则到当前字符为止的最大不重复子串开始位置为“哈希表中该字符的 value 与原开始位置的最大值”,总的最大长度为“原最大长度与当前字符最大长度的最大值”,最后将当前字符的哈希表值更新。

上面是一个滑动窗口的思想,将新的数据与已有的相比较,从索引 i到 j−1 之间的子字符串 s​ 已经被检查为没有重复字符。我们只需要检查 s[j] 对应的字符是否已经存在于子字符串 s中即可

滑动窗口是数组/字符串问题中常用的抽象概念。 窗口通常是在数组/字符串中由开始和结束索引定义的一系列元素的集合,即 [i, j)(左闭,右开)。而滑动窗口是可以将两个边界向某一方向“滑动”的窗口。例如,我们将 [i, j) 向右滑动 1 个元素,则它将变为 [i+1, j+1)(左闭,右开)。

返回最大不重复子串,并且返回最大不重复子串。


class Solution:def lengthOfLongestSubstring(self, s_str):start_dict = {}#建立一个开始字典start, max_len = -1, 0max_start=0for index in range(len(s_str)):if s_str[index] in start_dict:start = max(start_dict[s_str[index]], start) #i是目前正在计算的最长字串的起点位置if index - start>max_len:max_start = start+1max_len = max(max_len, index - start )print(index, s_str[index], "max_len", max_len, start_dict,start)start_dict[s_str[index]] = index #输入 s[j] :jreturn max_len,start_dict,max_start""" j 表示子串终止位置,i表示字串起始位置 当未出现重复时,字符串的长度即为字符串的结束位置减去起始位置。发生重复时,重新利用字符串的结束位置j减去新的起始位置i,并与之前的未重复字串的长度作比较取较大者"""if __name__ == '__main__':sss="ababdabcd"bbb,start_dict,max_start=Solution().lengthOfLongestSubstring(sss)print("str_len",len(sss),bbb,"max_start",max_start)# print(start_dict)

————————————————
版权声明:本文为CSDN博主「makcooo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44756223/article/details/89401804

python学习3. 无重复字符的最长子串(滑动窗口)相关推荐

  1. python最长连续子串_LeetCode 03无重复字符的最长子串(滑动窗口)

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

  2. LeetCode精讲 03无重复字符的最长子串(滑动窗口)

    题目描述 原创作者:bigsai,维护不易,如有收获,还请点赞.收藏支持! 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcb ...

  3. JAVA窗口sin值_大厂经典笔试题—LeetCode03无重复字符的最长子串(滑动窗口)

    题目描述 原创作者:bigsai,长期维护不易,如有收获还请点赞.收藏支持! 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabc ...

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

    3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...

  5. Leetcode刷题100天—3. 无重复字符的最长子串(滑动窗口+集合+双指针)—day21

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 3. 无重复字符的最长子串 难度中等6009收藏分享切换为英文接收动态反馈 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 ...

  6. 滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...

    一.算法题 题目 Given a string, find the length of the longest substring without repeating characters. Exam ...

  7. 刷题练习记录(3)——无重复字符的最长子串(JAVA 和 Python)——set()函数/集合...

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

  8. python经典算法题:无重复字符的最长子串

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

  9. 无重复最长子串python_leetCode 无重复字符的最长子串 python(Longest Substring Without Repeating Characters) python...

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

最新文章

  1. Android JNI入门第四篇——jni头文件分析
  2. 谜题81:烧焦到无法识别
  3. UIImageView
  4. JUnit的各种断言
  5. Tesseract-OCR 字符识别---样本训练 [转]
  6. 博士申请 | 香港中文大学(深圳)罗元教授招收计算机与信息工程全奖博士
  7. 如何获得即时编译器(JIT)的汇编代码(linux环境下)
  8. linux系统运行powerbi,使用 Power BI 服务 - Power BI | Microsoft Docs
  9. Hibernate3.x,hibernate3.x,Hibernate3.x整合Spring3.x不能实现自动创建表结构的解决办法:...
  10. Java正则之Unicode属性匹配的那些事
  11. (44)FPGA面试题CMOS和TTL电路区别
  12. 三星Galaxy Note 20系列或将于8月5日发布
  13. 毕业生,管好你的档案和户口
  14. NUC1013 阶乘结果末尾有多少零【分析思维】
  15. 冒泡法排序c语言代码大全,C语言实现选择排序、冒泡排序和快速排序的代码示例...
  16. ui web php,Uimaker 一个精美的后台管理系统模版,可使用在web 中 WEB(ASP,PHP,...) 262万源代码下载- www.pudn.com...
  17. 单片机c语言中flag用法,单片机中定义flag有啥作用flag=1和flag=0都是什么意思
  18. 项目中碰见的错误(三) 对路径的访问被拒绝
  19. 关于vscode打感叹号无法输出html模板的解决方法
  20. 高速PCB多层板叠层设计原则

热门文章

  1. Ubuntu 16.04 利用qemu模拟ARM开发板
  2. STL的remove函数和list的remove成员函数
  3. Android开发--详解ContentProvider/Cursor的使用
  4. html悬浮的图片居中,HTML/CSS:图片居中(水平居中和垂直居中)
  5. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf
  6. 更改as的默认gradle地址_面试官:谈谈这4种磁盘IO调度算法--CFQ、NOOP、Deadline、AS...
  7. jquery设置复选框为只读_checkbox设置复选框的只读效果不让用户勾选
  8. java+enum+devicetype_Java HmDatapoint.isNumberType方法代碼示例
  9. 扩展 日历_2021少林日历 | 以最美的方式记录时光
  10. python中forward函数的引用_调用没有.forward()的forward函数