您的位置:首页 > 编程语言 > Python开发

[leetcode: Python]3. Longest Substring Without Repeating Characters

2017-05-17 17:54 441 查看
Title:

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given
"abcabcbb"
, the answer is
"abc"
, which the length is 3.

Given
"bbbbb"
, the answer is
"b"
, with the length of 1.

Given
"pwwkew"
, the answer is
"wke"
, with the length of 3. Note that the answer must be a substring,
"pwke"
is a subsequence and not a substring.

题目大意:

给定一个字符串,从中找出不含重复字符的最长子串的长度。例如,”abcabcbb”的不含重复字母的最长子串为”abc”,其长度是3。”bbbbb”的最长子串是”b”,长度为1。

解题思路:

“滑动窗口法”

变量start和end分别记录子串的起点和终点

从左向右逐字符遍历原始字符串,每次将end + 1

字典countDict存储当前子串中各字符的个数

当新增字符c的计数 > 1时,向右移动起点start,并将s[start]在字典中的计数 - 1,直到countDict[c]不大于1为止

更新最大长度

(怎么LeetCode上居然没有其他使用python的答案吗。。还是我电脑的问题?)

方法一:98ms

class Solution:
# @return an integer
def lengthOfLongestSubstring(self, s):
ans, start, end = 0, 0, 0
countDict = {}
for i in s:
end += 1
countDict[i] = countDict.get(i, 0) + 1
while countDict[i] > 1:
countDict[s[start]] -= 1
start += 1
ans = max(ans, end - start)
return ans
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: