[Leetcode][3][longest substring without repeating characters][Medium]

题目描述:

最长连续无重复子字符串
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.

解题思路:

我们只需要记录,当前字符是否出现在hashmap中,出现的最后的位置是哪里(非当前位置), 还有连续无重复子字符串长度区间的最左边界。
因为只要中间出现过重复序列(abcdda),往后的更新(da)就跟重复序列前面的字符(abcd)毫无关系了。

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        ans = 0
        left = 0
        tab = {} # hashmap
        for i, j in enumerate(s):
            if j in tab and tab[j] >= left: # 如果j字符在hashmap中出现过,并且j在map中对应的值大于等于区间的左指针,意味着出现重复序列
                left = tab[j] + 1    #更新区间的最左边界
            tab[j] = i     # 更新j字符的最右出现过的位置
            ans = max(ans, i - left + 1)       #比较最长序列
        return ans
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,488评论 0 10
  • 每天能动笔画画,真是安静的美好。
    云朵儿z阅读 251评论 1 2
  • 孩子下课后爸爸照例送来了我这里,因为外出陪检回来时儿子已经呆了好一会,看到儿子自己坐在床上看十万个为什么,有过要提...
    叶青丁当妈阅读 224评论 1 0
  • 文 / 西门君 图 / 网络 1. 这两天微博有一个话题上了热搜,「渣男爱用的头像」。我一看,还真的挺眼熟的: 仿...
    西门君不吐槽阅读 481评论 0 0
  • 高考、出分、填写志愿、入学。 匆匆而过的过程甚至来不及思考,我们在绞尽脑汁怎样去报一个更好的学校时,有没有想过专业...
    惹沙阅读 500评论 0 0