[Medium] 3. Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.

Example 1:

Input: "abcabcbb"
Output: 3 
Explanation: The answer is "abc", with the length of 3.

Example 2:

Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

Input: "pwwkew"
Output: 3
Explanation: 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.

 

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        max_ = 0
        start = 0
        dict_ = {}
        for i in range(len(s)):
            if s[i] in dict_  and start <= dict_[s[i]]:
                start = dict_[s[i]] + 1    
            else:
                max_ = max(i- start + 1, max_)
            dict_[s[i]] = i
        return max_

别人的用:

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        dct = {}
    max_so_far = curr_max = start = 0
    for index, i in enumerate(s):
        if i in dct and dct[i] >= start:
            max_so_far = max(max_so_far, curr_max)
            curr_max = index - dct[i]
            start = dct[i] + 1
        else:
            curr_max += 1
        dct[i] = index
    return max(max_so_far, curr_max)
==================================================================

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        substrings = []
        if not s:
            return 0
        for index, letter in enumerate(s):
            if not substrings:
                substrings.append(letter)
            elif letter in substrings[-1]:
                substrings.append(substrings[-1][substrings[-1].index(letter)+1:]+letter)
            else:
                substrings[-1] += letter
        return len(max(substrings, key=len))

 

数组第一个值a[0],loca=0, 第二个值a[1],addr=1,往后走遇到的第一个和a[0],位置相减是长度。直到遍历完整个string。loca++,addr再遍历完loca+1+1直到尾巴,如此循环。效率是低了些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值