8.最长的无重复字符的子串

1.题目描述

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

示例 1:

复制代码
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。

示例 3:

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

2.解题思路

用两个指针i和j分别记录当前最长无重复字符子串的长度,j每往后遍历一个字符,就回头来找前面i,j-1个字符里面有没有和新遍历相同的字符,如果有就移动i缩小窗口,得到当前新的无重复字符子串,长度为j-i+1,然后取最大。

3.代码

cpp 复制代码
int lengthOfLongestSubstring(string s) {
        int i = 0,j =1,res = 0;//j是窗口右侧,i是窗口左侧
        if(s.size()==1) return 1;
        while(j<s.size()){//遍历到最后一个元素
            for(int k = i;k<j;k++){//找在[i,j-1]内,有没有s[m]==s[j]的元素,如果有则移动左窗口缩减窗口大小
                if(s[k]==s[j]){
                    i = k+1;//移动到重复元素的右边一个元素
                }
            }
            res = max(res,j-i+1);
            j++;
        }
       return res; 
    }
相关推荐
WL学习笔记2 小时前
模板初阶(C++)
开发语言·c++·后端·模板初阶
埃伊蟹黄面2 小时前
面试常问题目 —— STL
c++·面试·职场和发展·stl
CHANG_THE_WORLD2 小时前
ida-multi-mcp-跨版本逆向实战博客
c++
青瓦梦滋2 小时前
【在线五子棋对战】游戏匹配模块
网络·c++·网络协议·http·https
David猪大卫2 小时前
【C++修炼】STL容器—模板进阶:非类型模板参数、模板特化、模板分离编译
c语言·开发语言·c++·经验分享·笔记·学习·面试
纪念 2293 小时前
C++ vector(一)
开发语言·c++
垆边人似月.3 小时前
最少的元素个数使和为 target
数据结构·c++·算法
Zip-List3 小时前
工作小记-pytorch的算子优化: 转gpu核函数 python调c
c语言·c++·pytorch·python·cuda
暖焰核心3 小时前
多态全解——虚函数、重写、虚表与多态原理
c++
白杨尚青4 小时前
C++入门篇(十八):模板进阶——非类型参数、特化全家桶与分离编译(收官篇)
开发语言·c++·笔记·模板·偏特化·分离编译