[LeetCode]3. Longest Substring Without Repeating Characters
3. Longest Substring Without Repeating Characters
dp[i] = max(dp[i-1], 从重复位置开始计算的子串长度) (if 重复)class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        dp = [0] * len(s)
        dp[0] = 1
        start = 0
        used_char = {s[0]: 0}
        for i in range(1, len(s)):
            if s[i] in used_char:
                start = max(start, used_char[s[i]] + 1)
            dp[i] = max(dp[i - 1], i - start + 1)
            used_char[s[i]] = i
        return dp[len(s) - 1]
class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        start = 0
        l = len(s)
        usedchar = {}
        max_len = 0
        for i in range(l):
            # 存在,并且保证上一个的位置需要比起始的位置后面
            if s[i] in usedchar and usedchar[s[i]] >= start:
                start = usedchar[s[i]] + 1
            else:
                max_len = max(max_len, i - start + 1)
            usedchar[s[i]] = i
        return max_len 
关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号