leetcode题解#3:无重复字符的最长子串

Posted linkcxt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode题解#3:无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

leetcode题解:无重复字符的最长子串

题目

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

示例 1:

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

思路

  1. 构造子串的首尾指针。

  2. 判断子串是否重复的方法:利用string的find_first_of方法,传入子串的最后一个字符,当返回的下标非子串的长度,即end-begin,则表明已经重复。

  3. 若重复:则判断长度,比当前记录的最大值大,则覆盖,并重置首尾指针。

  4. 不重复:则尾指针++,继续判断下一个字符。

  5. 循环出口判断条件尾末尾指针大于原字符串长度。

  6. 其中字符串的赋值利用了string的assign方法,注意传入的第三个参数是子串长度,而不是末尾下标。

代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int max=0,begin=0,end=1; // 初始化参数
        string temp; // 存储子串
        temp.assign(s,begin,end-begin+1); // assign(string,begin,count); 初始化 
        
        while(end <= s.length()){ // 出口,末尾指针超出范围
            if(temp.find_first_of(s[end]) != (end-begin) ){ // 重复判定
                if((end-begin) > max) // 判断长度
                    max = (end-begin);
                begin = begin +1; // 重新开始
                end = begin +1;
            }else{
                end++; // 增加长度
            }
                temp.assign(s,begin,end-begin+1); // 继续赋值
        }
        return max;
    }
};

 

 

 

以上是关于leetcode题解#3:无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

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

LeetCode-无重复字符的最长子串 -- Java

2021最后一道题解3.无重复字符的最长子串

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

leetcode 3. 无重复字符的最长子串----滑动窗口篇1,双指针篇1

LeetCode 第3题 无重复字符的最长子串