LeetCode 3. 无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 无重复字符的最长子串是 “abc”,其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 无重复字符的最长子串是 “b”,其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 无重复字符的最长子串是 “wke”,其长度为 3。
通过滑动窗口的方式来寻找最长子串。 每次如果找到一个与之前子串中字母重复的字符,只需要从该字符前一次出现位置的下一位开始继续搜寻即可,不需要重新开始。
将字符串s中的字符以键值对的形式存入字典,用于记录每个字符出现的位置,如果该字符已存在字典中,则移动指针。如果指针位置大于开始的位置,那么将start设置为指针所在位置。此时子串长度是当前位置减去开始位置+1。
这里用Python实现:
class Solution(object):
def lengthOfLongestSubstring(self, s):
dict = {}
max = start = 0
for i,value in enumerate(s):
if value in dict: #如果元素重复,首先更新指针
pos = dict[value]+1 #移动指针
if pos > start:
start = pos
num = i-start+1 #统计字符
if num > max: #更新总数
max = num
dict[value] = i #记录下当前字母在s中的位置
return max