[Leetcode][python]Longest Substring Without Repeating Characters
2017-08-08 00:58
417 查看
题目大意
给定一个字符串,从中找出不含重复字符的最长子串的长度。例如,”abcabcbb”的不含重复字母的最长子串为”abc”,其长度是3。”bbbbb”的最长子串是”b”,长度为1。
解题思路
哈希表双指针
来自博客
变量start和end分别记录子串的起点和终点
从左向右逐字符遍历原始字符串,每次将end + 1
字典countDict存储当前子串中各字符的个数
当新增字符c的计数 > 1时,向右移动起点start,并将s[start]在字典中的计数 - 1,直到countDict[c]不大于1为止更新最大长度
优化思路:遇到重复的字母,直接跳到重复字母的后面一个,而不是像之前那样慢慢向右移动!
代码
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ ans, start, end = 0, 0, 0 countDict = {} for c in s: # str在python中类似list可直接按索引遍历每个字母 end += 1 countDict[c] = countDict.get(c, 0) + 1 # countDict.get(c, 0)若c不存在直接返回0 while countDict[c] > 1: countDict[s[start]] -= 1 start += 1 ans = max(ans, end - start) return ans
优化思路:遇到重复的字母,直接跳到重复字母的后面一个,而不是像之前那样慢慢向右移动!
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ used = {} max_length = start = 0 for i, c in enumerate(s): if c in used and start <= used[c]: start = used[c] + 1 else: max_length = max(max_length, i - start + 1) used[c] = i return max_length
总结
countDict.get(c, 0)相关文章推荐
- [LeetCode] Longest Substring Without Repeating Characters Python
- [leetcode]Longest Substring Without Repeating Characters(using python)
- Leetcode3:Longest Substring Without Repeating Characters@Python
- leetcode Longest Substring Without Repeating Characters python
- leetcode Longest Substring Without Repeating Characters python
- leetcode_[Python/C++]_3_Longest Substring Without Repeating Characters(不重复子串最大长度)
- (python)leetcode刷题笔记03 Longest Substring Without Repeating Characters
- leetcode-03-Longest Substring Without Repeating Characters-python
- [LeetCode]3 Longest Substring Without Repeating Characters (C++,Python实现)
- LeetCode-3-Longest-Substring-Without-Repeating-Characters 尺取法+Python数组初始化+ASCLL转换
- [leetcode]Longest Substring Without Repeating Characters @ Python
- Longest Substring Without Repeating Characters Leetcode Python Java
- [LeetCode]Longest Substring Without Repeating Characters@python
- leetcode(三)—— Longest Substring Without Repeating Characters(最长不重复子串 Python/C++)
- 3.Longest Substring Without Repeating Characters Leetcode Python
- [LeetCode]题解(python):003-Longest Substring Without Repeating Characters
- leetcode python - Longest Substring Without Repeating Characters
- LeetCode 3 — Longest Substring Without Repeating Characters (C++ Java Python)
- Leetcode -- Python -- Longest Substring Without Repeating Characters
- [LeetCode] Longest Substring Without Repeating Characters