看了各位大神的,真是难堪,尤其是各种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. docker学习6-docker-compose容器集群编排

    前言 实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器. 我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有 ...

  2. 为什么管理人员都喜欢用Visio画图

    一.形状数据一体化 这是管理者最喜欢的功能了,这也Visio的最核心的功能: 操作如下: 例如流程中的步骤.开始日期或结束日期.成本.设备部件等.数字.图标.颜色.标志和进度条等图形有助于快速方便地浏 ...

  3. CentOS 6.x 无法格式化大于16TB的ext4分区处理

    CentOS 6.x 在格式化大于16TB的ext4分区时,会提示如下错误: mke2fs 1.41.12 (17-May-2010) mkfs.ext4: Size of device /dev/s ...

  4. 更丰富的符号工具包 Font Awesome

    我时常想要在此类文档中通过一些图形符号来表达更丰富的含义或是对段落进行标注,例如使用 Emoji.然而 Emoji 在这方面仍然有存在一些不足,如: 颜色与文字风格不统一, 在不同系统的平台上显示不统 ...

  5. 常见的transformation算子

    RDD:RDD分区数,若从HDFS创建RDD,RDD的分区就是和文件块一一对应,若是集合并行化形式创建,RDD分区数可以指定,一般默认值是CPU的核数. task:task数量就是和分区数量对应. 一 ...

  6. 海康相机开发(1) SDK安装和开发

    1.1 安装包获取 从官网下载最新版本的MVS安装包,支持Windows xp.Windows 7.Windows 8.Windows 10的32和64位系统.安装过程默认即可. 官网下载链接:htt ...

  7. Tensorflow可视化-P295-Tensorboard可视化

    各模块含义 1>表示一个Batch的大小是不确定的 2>当两个节点之间传输的张量多与1时,可视化效果图将只显示张量的个数 3>效果图上的粗细表示两个节点之间传输的标量维度的总大小,而 ...

  8. 持续集成学习8 jenkins权限控制

    一.总体配置 1.系统管理---> Configure Global Security 2.配置基于角色授权 创建角色 ----> 分配角色 代表着所有以dev-开头的 job全部都分配给 ...

  9. git下载指定分支到本地

    从网上查了很多方法有很多种,自我感觉下面这种更方便 git clone xxx.git --branch 分支名/dev/...

  10. springMVC开启声明式事务实现操作日志记录

    第一步.在applicationContext-mvc.xml开启AOP注解扫描 <aop:aspectj-autoproxy/> 第二步.创建增强类,实现日志记录 @Component ...