Longest Substring Without Repeating Characters
2015-12-10 10:39
351 查看
题目:https://leetcode.com/problems/longest-substring-without-repeating-characters/
算法思路:
定义三个变量positions、max、start,分别表示不同字符的位置、最大不重复子串长度、不重复子串的开始位置
不重复子串的最大长度是当前max的值与当前遍历位置减去start之间的较大者。
start记录的位置,表示了当前位置和start之间不存在重复字符,一旦遇到重复字符,就需要更新start。所以,程序始终保持,start与当前位置之间字符的不重复性。
算法思路:
定义三个变量positions、max、start,分别表示不同字符的位置、最大不重复子串长度、不重复子串的开始位置
不重复子串的最大长度是当前max的值与当前遍历位置减去start之间的较大者。
start记录的位置,表示了当前位置和start之间不存在重复字符,一旦遇到重复字符,就需要更新start。所以,程序始终保持,start与当前位置之间字符的不重复性。
start的更新:
在字符串遍历过程中,如果整个遍历都没有重复字符,则最大不重复子串长度就是字符串遍历的最后位置减去start(不重复子串开始位置)。如果在遍历过程中出现了重复字符,则需要更新start,start就等于该重复字符上一次出现的位置。positions的更新:
遍历过程中,对于每一个字符,都将当前位置覆盖之前字符出现的位置。max的更新:
每遍历一个字符,都需要重新计算max,比较当前max和当前位置与start之差的大小,用较大的更新maxclass Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ positions = {} max = 0 start = -1 for index, str in enumerate(s): if str in positions and start < positions[str]: start = positions[str] if max < index - start: max = index - start positions[str] = index return max
相关文章推荐
- Github readme语法-- markdown
- FP角度下的责任链模式(中间件模式,middleware)
- Forget Restclient and Embrace Postman for Rest API testing
- ubuntu server14.04 lnmp1.2 mysql添加innodb
- Java中抽象类和接口的用法和区别
- 【应用】信息短时存储
- Xcode Archive时卡住(hangle/stuck)问题
- 值得推荐的C/C++框架和库 (真的很强大)
- Linux服务器多端口配置
- CSS伪元素样式 :before 和 :after
- android studio的使用说明
- GitHub 上传地址
- eclipse myeclipse 查看java jdk源码
- C# 中的 Async 和 Await
- poj 1160(Post Office)
- nginx强制缓存
- 【springmvc+mybatis项目实战】杰信商贸-14.购销合同添加+修改+删除+查看
- ubuntu下软件安装卸载与查看
- Android RecyclerView 使用完全解析 体验艺术般的控件
- UIGraphicsBeginImageContext UIGraphicsGetImageFromCurrentImageContext 压缩,修改,截取图片