看了各位大神的,真是难堪,尤其是各种c++动不动就击败99%。。。
我用python,换了三次算法,改了十几次bug,才击败5%。。。。
贴出来纪念下吧。

题目如下:


给定一个字符串,请你找出其中不含有重复字符的?最长子串?的长度。

示例?1:

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

示例 2:

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

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是?"wke",所以其长度为 3。
?

请注意,你的答案必须是 子串 的长度,"pwke"?是一个子序列,不是子串。


对s="ojyseenuxxpohrysqixldpki"的纸面运算模拟:

 def lengthOfLongestSubstring(self, s: str) -> int:
#该函数思路为:从头到尾逐个移动字符,添加到临时字符串中,如果临时字符串已经包含该字符,则剪切至sc列表中保存,并临时字符串清空,重新待填充
sc=[] #列表方式
temps={}#临时字典,按字符头+临时字符串方式
maxlen=0 for x in s:
if x not in sc:#如果该字母在sc字典中不存在以该字母为首字母序列的列表的,则创建之,并填充
sc.append(x)
temps[x]=x
for y in list(temps.keys()):#对临时字符串字典中的key进行遍历
if x in temps[y]:#如果在临时字符串里面有x,则把不重复的字符串添加到sc
if temps[y] not in sc:
sc.append(temps[y])
if x==y:#填充完后,对临时字符串进行处理,
temps[y]=x#对于abc遇到a这种,abc上sc,然后临时字符串a重新从a字符开始
else:
temps[y]=""#对于abc遇到c这种,abc上sc,然后临时字符串a清空,因为下一个字符是c,临时字符串c可能不为空,不能随便覆盖
else:
if temps[y]!="" or (y==x and temps[y]==""):#对于临时字符串如果不为空,则增加字符,对于被清空的字符串,如果字符头和遇到的字符一样,则同意添加
temps[y]=temps[y]+x for y1 in list(temps.keys()):#运行完成后,再回头把所有temps筛选不重复的填充进sc
if temps[y1] not in sc:
sc.append(temps[y1])
#print(sc)
for x1 in sc:#从sc列表中选取最长的字符串,求长度并返回
if len(x1)>maxlen:
maxlen=len(x1)
return maxlen

心得体会:

1、必须纸面模拟,否则直接写,很多地方难以理解为什么,比如临时字符串什么时候清空,什么时候保留一个字符,前面两个算法都没想明白,模拟后发现了差别。

2、list好虽好,但在for循环中,获取最后一个元素没有现成方法,遗憾。(如果x==s[-1:],会有重复的,如果是for用数字循环,则又不值得)

LeetCode,3. 无重复字符的最长子串的更多相关文章

  1. Leetcode(三)无重复字符的最长子串

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

  2. 【LeetCode】无重复字符的最长子串【滑动窗口法】

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

  3. [LeetCode] 3. 无重复字符的最长子串

    题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...

  4. 【leetcode 3. 无重复字符的最长子串】解题报告

    思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...

  5. LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...

  6. Leetcode——3. 无重复字符的最长子串

    难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ...

  7. 力扣Leetcode 3. 无重复字符的最长子串

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

  8. [LeetCode]3. 无重复字符的最长子串(滑动窗口)

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

  9. [LeetCode]3.无重复字符的最长子串(Java)

    原题地址: longest-substring-without-repeating-characters/submissions 题目描述: 示例 1: 输入: s = "pwwkew&qu ...

  10. LeetCode 3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)

    题目描述 给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. ...

随机推荐

  1. js插件---videojs中文文档详解

    js插件---videojs中文文档详解 一.总结 一句话总结: js插件网上都有很多参考资料,使用起来也非常简单 二.lavarel中使用实例 <video id="example_ ...

  2. JS关闭当前窗口

    function logOut() { $('#logging-out').on('click', function () { stopPreventDefault(); $.messager.con ...

  3. wait,waitpid

    要求 用man wait, man waitpid学习wait waitpid的使用 2 写出wait 的测试代码,要能说明你理解了wait 的返回值的每一位的含义 实验: ---------- ma ...

  4. Flume架构以及应用介绍(转)

    在具体介绍本文内容之前,先给大家看一下Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步,从而引出 ...

  5. 《团队作业第三、四周》五阿哥小组Scrum 冲刺阶段---Day3

    <团队作业第三.四周>五阿哥小组Scrum 冲刺阶段---Day3 一.项目燃尽图 二.项目进展 20182310周烔今日进展: 主要任务一览:界面布局的设计 20182330魏冰妍今日进 ...

  6. 珠峰 - 郭永峰react课程 node es6 babel学习笔记

    npm install babel-cli -g //安装babel babel index.js -o a.js //等同于 babel index.js --out-file a.js 复制ind ...

  7. modbus-poll和modbus-slave工具的学习使用——modbus协议功能码2的解析

    功能码2的功能是:读从机离散量输入信号的 ON/OFF 状态.可读取1-2000个连续的离散量输入状态,如果离散输入的数量个数不是8的整数倍,则用0填充最后数据字节的剩余位,功能码2的查询信息规定了要 ...

  8. HBase学习笔记之BulkLoad

    HBase学习之BulkLoad bulkload的学习以后再写文章. 参考资料: 1.https://blog.csdn.net/shixiaoguo90/article/details/78038 ...

  9. robot framework的使用方法

    1.后台代码: 目录结构: 测试代码:Arithmetic.py 2.开始编写用例 直接在eclipse上新建一个txt文件即可,或者是通过ride编写用例. (1).首先在eclipse上新建目录T ...

  10. (1)WIFI信号确定距离

    https://blog.csdn.net/PINGER0077/article/details/79482238 ESP8266不需要修改任何库 #include "ESP8266WiFi ...