题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
解题
l 最大长度记录
st 无重复字段开始指针
i 字符下标,也是无重复字段结束位置
dic{} 储存遍历的字符
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
l=0
st=0
dic={}
for i in range(len(s)): #遍历字符串s
cur = s[i] #临时存入字符
if cur not in dic.keys(): #判断字符是否在dic里面已经存在
dic[cur] = i #如果不存在存入键值对
else : #如果存在(有重复字符出现)
if dic[cur] + 1 > st: #如果开始指针在上一个该重复字符前面
st = dic[cur] + 1 #让指针指向上一个该重复字符后一个字符
dic[cur] = i #如果开始指针不在上一个该重复字符前面,证明之前已经出现过重复字符,st指向位置不变(举例 abcba )
if i-st+1>l: #计算最长长度
l=i-st+1
return l