LeetCode.3.无重复字符的最长字串(中等)

题目描述:

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

输入输出实例:

思路:对于这道题目,思路就是建立一个空的列表或者字典来存储子数组,遍历这个字符串数组,如果字符在列表或者字典中,我们就需要看怎么更新我们的起始下标,然后怎么更新我们的长度,我用的是字典,如果字符在字典中,start = max(start,char_index_map[char]+1),需要考虑一下当前的起始下标大还是字符在上次出现的位置+1大,我们取更大的那个当作我们的起始下标,然后比较当前的max_len和当前的末尾下标-起始下标+1哪个大,我们取大的那个。根据上述思路和算法有以下代码:

class Solution:

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

        n = len(s)

        if n==0 or n==1:

             return len(s)

        else:

            char_index_map = {}

            start = 0

            max_len = 0

            for end,char in enumerate(s):

                if char in char_index_map:

                    start = max(start,char_index_map[char]+1)

                char_index_map[char] = end

                max_len = max(max_len,end-start+1)

            return max_len

如果要问我们具体的最长字符是什么,只需要在最后一步加一点,然后提前放一个空字符串用来保存就好了(strs  = ‘’):

if end - start +1 > max_len:

max_len = end - start +1

strs = s[start:end]

最后成功通过了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值