leetcode之3. 无重复字符的最长子串python实现

本文介绍了一种使用贪心思想求解无重复字符最长子串的算法,通过动态更新最长子串的起始索引和记录字符首次出现位置的字典,实现了高效查找。并提供了Python代码实现。

无重复字符的最长子串

一、思路

使用贪心思想,首先从第一个字符开始往后遍历,只要碰到已经出现过的字符我们就必须从之前出现该字符的index+1处开始重新往后,更新当前最长子串的起始字符索引start_index

二、python实现

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        res_len, start_index, s_len = 0, 0, len(s)
        occur_dict = {}
        for i in range(s_len):
            start_index = max(start_index, occur_dict.get(s[i], -1)+1)
            res_len = max(res_len, i - start_index + 1)
            occur_dict[s[i]] = i
        return res_len

变量意义:
res_len:最长子串的长度
start_index:当前最长子串的起始索引
occur_dict:字典,用来存放字符第一次出现时的索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值