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

该算法使用滑动窗口思想解决找到字符串中最长的无重复字符子串问题。通过start和end两个指针,维护一个无重复字符的子串。当遇到重复字符时,更新start指针位置。每次end指针右移并更新子串长度,与当前最长长度比较取最大值。
摘要由CSDN通过智能技术生成

滑动窗口

1、设置start和end指针,start指向无重复字符串的第一个字符,end指向无重复字符串的最后,并且一直向后移动
2、end指针每次向后移动一次后,使用for循环遍历看start和end之间的字符有没有和end新指向的字符相同,若有则将start指针移动到相同字符的后面,并更新此时的无重复字符串长度
3、记录无重复字符串长度为num=end-start,取最大值

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int result=0;      //记录最大长度
        int num=0;         //记录当前无重复字符串的长度
        int len=s.size();
        int start=0;       //无重复字符串的开头
        int end=0;         //无重复字符串的结尾
        //s[start,end) 前面包含 后面不包含
        while(end<len){
            char ch=s[end];
            for(int i=start;i<end;i++){
                if(s[i]==ch){   //遇到重复的字符则将start变成重复字符的下一个
                    start=i+1;
                    num=end-start;   //更新此时的字符串长度
                    break;           //找到重复字符并更新start,不需要再循环,所以break
                }
            }
            end++;              //end指针往后移
            num++;              //字符串长度+1
            result=max(num,result);   //将之前和当前的字符串长度作比较,取最大值
        }
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值