leetcode T3 无重复字符的最长子串详解

无重复字符的最长子串

题目描述

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

示例:

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

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

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

详细题解

滑动窗口

滑动窗口实际是一个双端队列,队列中维护一个可行解,遍历时将新的元素从队列右端插入,判断新插入元素之后队列是否依旧是可行解,如果是,则继续,如果不是,则将左端的元素出列,直到队列中的元素成为一个新的可行解。

如何判断队列中的元素是否是一个可行解呢?本题中可以使用一个256元素visit数组来表示当前队列中的元素,当新插入的元素已经存在时,则不是一个可行解。

int lengthOfLongestSubstring(char * s)
{
    bool visit[256] = {0};
    int result = 0;
    int i = 0;
    int j = 0;

    if (!s) {
        return 0;
    }

    for (i = 0; '\0' != s[i]; i++) {
        if (visit[s[i]]) {
            result = result > i - j ? result : i - j;
            while (j < i) {
                if (s[j] != s[i]) {
                    visit[s[j]] = false;
                    j++;
                } else {
                    j++;
                    break;
                }
            }
        } else {
            visit[s[i]] = true;
        }
    }

    result = result > i - j ? result : i - j;
    return result;
}
方法 时间复杂度 空间复杂度 结果 时间 内存
方法 时间复杂度 空间复杂度 结果 时间 内存
滑动窗口 O(n) O(1) 通过 8ms 7.2M

?
?
?
?
?
?

原文地址:https://www.cnblogs.com/xiaoxxmu/p/11707206.html

时间: 2024-10-08 12:05:41

leetcode T3 无重复字符的最长子串详解的相关文章

leetcode 3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)

目录 题目描述: 示例 1: 示例 2: 示例 3: 解法: 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew"

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

难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一个字符串,请你找出其中不含有重复字符的?最长子串?的长度. 示例?1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字

Python版[leetcode]3. 无重复字符的最长子串(难度中等)

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3.示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1.示例 3: 输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其

【LeetCode】无重复字符的最长子串

给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. 给定 "bbbbb" ,最长的子串就是 "b" ,长度是1. 给定 "pwwkew" ,最长子串是 "wke" ,长度是3.请注意答案必须是一个子串,"pwke" 是 子序列  而不是子串. 解题思路: 1. 给两个数组

LeetCode[3] 无重复字符的最长子串

一道非常老的题目了,看上去很眼熟,但由于自己是个铁憨憨,还是在参考了官方解法后想了很久才把它完成. 惯例先说思路,借助一个hash数组记录上一次出现该字母的位置,两次出现该字母中间的长度就是这一段无重复子串的长度. 举个例子,字符串abcabcbb,第一次出现字母a的位置为0,第二次出现字母a的位置为3,两次出现字母a中间的长度3就是无重复子串abc的长度. 出现重复字母就可以从重复的字母位置开始继续向下探索了,还是以abcabcbb为例,位置3出现重复字母,我们只需从位置3继续向下探索,而不是

Leetcode(3)无重复字符的最长子串

Leetcode(3)无重复字符的最长子串 [题目表述]: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 第一种方法:暴力 执行用时:996 ms: 内存消耗:12.9MB 效果:太差 class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ Maxsize=0 res='' if len(s)

【Leetcode】【Longest Substring Without Repeating Characters】【无重复字符的最长子串】【C++】

题目:给定一字符串,求其无重复字符的最长子串长度. 思路:for循环一次,时间复杂度为O(N).字符的ascii值为32~126.start表示当前无重复字符子串的初始位置,初始值为0:可定义一个位置数组pos[128]表示for循环索引到当前位置时相应的字符对应的位置.若当前字符s[i](其ascii值为cur_pos),若pos[cur_pos]>=start,说明在start之后已有该字符s[i],则以start开始的子串第一次遇到重复字符,打住.判断当前长度是否大于max_len,若大于

[LeetCode]无重复字符的最长子串

给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 无重复字符的最长子串是 "b",其长度为 1. 示例 3: 输入: "pwwkew" 输出: 3 解释: 无重复字符的最长子串是 "wke",其长度为 3.   请注

LeetCode 无重复字符的最长子串(探索字节跳动)

题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "w