[LeetCode]题解(python):003-Longest Substring Without Repeating Characters
2015-09-07 16:00
363 查看
题目来源:
https://leetcode.com/problems/longest-substring-without-repeating-characters/题意分析:
题目是要求出最长的不重复子字符串的长度。比如字符串abcabcbb,得到的最长无重复子字符串就是abc,bca或者cab,那么它最长的不重复长度就是3.题目思路:
首先,我们可以想到的方法就是每个字符为起点,找到对应的最长不重复子字符串长度,最后进行比较得到最长的不重复子字符串长度。这个方法的时间复杂度为(O(n^2))。如果用这个方法,那么很容易就会TLE。那么我们回想一下题目例子我们找无重复子字符串的过程。我们从第二个a开始找的时候,找到了倒数第二个b,发现b已经出现过了,这时候,我们再从第二个b开始找,那么得到的无重复子字符串必定比从a开始找要短,那么我们就不需要再从b开始找,而是从c开始找。也就是说,当我们发现这个字符在前面的无重复子字符串出现的位置后一位开始找。如此我们可以节省很多时间,并且我们只需要从头找一次就可以得到答案。时间复杂度为(O(nlogn)。
代码(python):
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ lls = 1 if len(s) == 0: return 0 if len(s) == 1: return 1 i = 1 curbegin = 0 while i < len(s): cur = s.find(s[i],curbegin,i) if cur != -1: lls = max(lls,i - curbegin) curbegin = cur + 1 i += 1 if s.find(s[len(s) - 1],curbegin,len(s) - 1) == -1: return max(lls,len(s) - curbegin) return lls
View Code
PS:这里很容易忘记处理当最后一个字符再前面无重复子字符串里面的情况。
转载请注明出处:http://www.cnblogs.com/chruny/
相关文章推荐
- python生成随机数
- Python编辑器--Ulipad
- python-数据类型
- python缩进
- xpath: Python网页爬虫定位辅助利器
- [LeetCode]题解(python):002-Add Two Numbers
- python标识符
- [转] Python正则表达式指南
- Python 日期时间
- 欢迎使用CSDN-markdown编辑器
- 双击更新所有已安装的python模块
- python查询mysql,返回json
- 列表和元组的区别
- python项目包和文件的管理以及如何引用相对路径的包和模块
- python中文编码
- python规范
- Opencv-python学习笔记
- pip 安装 MySQL-python 失败
- [LeetCode]题解(python):001-Two-Sum
- python爬虫糗事百科