题解 | #最长不含重复字符的子字符串#
最长不含重复字符的子字符串
https://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7
题目:https://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7
双指针的做法
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param s string字符串 # @return int整型 # class Solution: def lengthOfLongestSubstring(self , s: str) -> int: left=0 right=-1 #每个字符放入字典判断是否出现过 maxgap=1 mydict={}#键是字符,值是所在下标。 for i in range(len(s)): if s[i] not in mydict: mydict[s[i]]=i right=right+1 else: right=right+1 left=max(mydict[s[i]]+1,left)#代表在此之前出现的s[i]元素对应的下标的后面一个 # 如果存在过该字符,说明可能需要更新起始位置。起始位置更新为之前该字符位置的后一个位置。 #(注意,起始位置只前进,不后退,所以需要取一个max)举例abcba的这种情况,不取max遍历到最后一个a时起始位置就后退了 mydict[s[i]]=i#再更新记录s[i]的坐标 gap=right-left+1 maxgap=max(maxgap,gap) return maxgap