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; 
    }
相关推荐
m0_708830969 小时前
C++中的享元模式实战
开发语言·c++·算法
naruto_lnq9 小时前
分布式计算C++库
开发语言·c++·算法
m0_706653239 小时前
模板编译期排序算法
开发语言·c++·算法
历程里程碑9 小时前
Linxu14 进程一
linux·c语言·开发语言·数据结构·c++·笔记·算法
m0_5613596710 小时前
嵌入式C++加密库
开发语言·c++·算法
近津薪荼10 小时前
优选算法——双指针专题7(单调性)
c++·学习·算法
JiL 奥10 小时前
Nexus制品归档(c/c++项目)
c语言·c++
j4455661110 小时前
C++中的职责链模式实战
开发语言·c++·算法
m0_6860416110 小时前
实时数据流处理
开发语言·c++·算法
知无不研10 小时前
内存碎片与内存优化
开发语言·c++·内存优化·内存碎片·内存操作