3. 无重复字符的最长子串 - 中级算法题

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

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

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

输入: s = ""
输出: 0

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
题目来源:Leetcode

解法思路:
由中间人记录最长字串,制定 flag 记录最大长度,判断长度是否大于原先,是则替换最长字串。
考虑边界,空。即可

class Solution:

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

                if not s:

                    return 0

                res = ''

                max_num = 0

                for index,value in enumerate(s):

                    if value not in res:

                        res += value

                        continue

                    else:

                        if index == len(s):

                            return len(res)

                        if not max_num:

                            max_num = len(res)

                        else:

                            if max_num >= len(res):

                                pass

                            else:

                                max_num = len(res)

                        aa = res.index(value) + 1

                        print(aa)

                        res += value

                        res = res[aa:index + 1]

                        print(res)

                print(res)

                if max_num:

                    return len(res) if len(res) > max_num else max_num

                else:

                    return len(res)