力扣刷题day003——无重复字符的最长字串

1.题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。

2.题目分析

前面我们使用了哈希表的方法求两数之和,我们了解了哈希表的特点,所以此题我们可以很快联想到用哈希表来存放字符串,哈希表的索引也可以帮我们计算字符串的长度。

然后这里可以使用指针来实现一个滑动窗口,从而实现目的

3.代码实现

class Solution:

    def lengthOfLongestSubstring(self, s: str) -> int:

        ##使用哈希表dic,左指针i,右指针j,i到j之间的距离就是不重复的字符数

        dic = {}

        res = 0

        i = -1

        #指针j先行出发

        for j in range(len(s)):

            #如果当前字符s[j]在哈希表dic中  

            if s[j] in dic:

                #更新左指针i为字符s[j]的上一次出现位置和当前左指针i的较大值  

                #这是为了保证i到j之间的子串不包含重复的字符

                i = max(dic[s[j]], i)

            #将字符s[j]及其位置j添加到哈希表dic中

            dic[s[j]] = j

             #更新最长不重复子串的长度为当前长度j-i和之前记录的最大长度res的较大值

            res = max(res, j-i)

        return res

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值