本文介绍: *解题思路:**这道题利用滑动窗口的思想,滑动窗口保证其中包含数据都是不重复的,并且将每个子串检查到了,确保不会漏下。请注意,你的答案必须是 子串长度,“pwke” 是一个序列,不是子串给定个字符s ,请你找出其中不含有重复字符的 最长子串长度解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “pwwkew”

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

示例 1:

输入: s = “abcabcbb”
输出: 3

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

示例 2:

输入: s = “bbbbb”
输出: 1

解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: s = “pwwkew”
输出: 3

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

**解题思路:**这道题利用滑动窗口的思想,滑动窗口保证其中包含的数据都是不重复的,并且将每个子串都检查到了,确保不会漏下。滑动窗口的左指针每次右移一个值,右指针一直移动到重复的字符为止。

感觉双重for循环也能解题,但是效率低,不如滑动窗口时间复杂度低。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    if(s.length<=1){
        return s.length
    }
    let right=1
    let maxLen=0
    for(let i=0;i<s.length;i++){
        let sub=s.slice(i,right)
        while(sub.indexOf(s[right])===-1&&right<s.length){
            right++
            sub=s.slice(i,right)
        }
        let len=sub.length
        if(len>maxLen){
            maxLen=len
        }
    }
    return maxLen
};

原文地址:https://blog.csdn.net/piupiu78/article/details/134737039

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23632.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注