3. 无重复字符的最长子串


一、题目描述

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

示例1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

二、思路 & 代码实现

1. 思路

使用两个for循环,外层循环控制起始位置,内层循环从起始元素开始,将未重复元素添加到一个临时数组,遇到重复元素就退出循环。将临时数组的长度也就是子串的长度添加到一个数组。最后比较数组内所有元素的最大值便是最长子串的长度。

2. 代码实现

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 默认子串长度为0
        # 1 使用常数统计最长子串长度
        # result = 0
        # 2 使用数组统计所有子串长度
        result = [0]
        length = len(s)
        for i in range(length):
            cur = []
            for j in range(i, length):
                if s[j] not in cur:
                    cur.append(s[j])
                else:
                    break
            #if len(cur) > result:
            #    result = len(cur)
            if len(cur) > 0:
                result.append(len(cur))
        #return result
        return max(result)

3. 表现

记录方式 运行时间 表现 内存消耗 表现
1 2168ms 4% 13.4MB 32%
2 2164ms 5.01% 13.3MB 84.95%

文章作者: Arvin He
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Arvin He !
评论
 上一篇
501. 二叉搜索树中的众数 501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出BST中的所有众数(出现频率最高的元素)。
2020-09-24
下一篇 
2. 两数相加 2. 两数相加
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方法存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则返回一个新的链表来表示它们的和。
2020-09-23
  目录