题目:
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.
题意:
给一个字符串,要求找到其最长的独特字串,这个独特字串中每一个字符都在这个子串中只出现过一次。
我们可以定义两个指针指向匹配字符串的左右边界,初始为0,0,维护一个代表已出现过字符的下标的映射,每次只需要查找s[r]在映射中的数值,比较其与当前下标的关系,例如“abcabcbb”,l=0,r=0,映射pos中pos['a'] = 0,当遇到第二个‘a'时,pos['a'] = 0,在[l, r)的区间之内,所以将调整到pos['a'] +1的位置,更新r,当遇到pos中没出现过的,则更新ans的大小值,维护pos,r++。
代码如下:
class Solution(object):
def lengthOfLongestSubstring(self, s):
if s is None:
return 0
pos = {}
maxLength = l = r = 0
while l <= r < len(s):
if s[r] in pos and l <= pos[s[r]] < r:
l = pos[s[r]] + l
else:
maxLength = max(maxLength, r - l + 1)
pos[s[r]] = r
r += 1
return maxLength