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

链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/

示例

输入: s = "abcabcbb" 

输出: 3 

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

解析

1)这是一个典型的双指针问题,如果右指针在没有相同元素的时候,可以一直往前移动;

2)左指针只有在遇到相同元素时,才往前移动;

3)需要注意的是,列表可能只有一个元素,就直接返回即可。

代码示例

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s) == 1:
            return 1
        max_len = 0
        left = 0
        right = 1
        while right < len(s):
            if s[right] not in s[left:right]:
                right += 1
                if right - left > max_len:
                    max_len = right - left
            else:
                left += 1
        return max_len

执行用时:52 ms, 在所有 Python3 提交中击败了 95.99% 的用户.

本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/412