欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode 3-- 无重复字符的最长子串 ( Longest Substring Without Repeating Characters )

程序员文章站 2022-07-13 21:09:37
...

题目描述 : 

LeetCode 3-- 无重复字符的最长子串 ( Longest Substring Without Repeating Characters )

​思路 : 这里可以借助位图的思想去解决该问题 , 位图传送门 -- https://blog.csdn.net/ds19980228/article/details/82592294

  1. 使用两个指针 , 一个快指针 , 一个慢指针 , 快指针先走 , 每走一步,判断快指针所指字符在位图中是否已经存在,不存在,存储字符信息并继续走,直到快指针指向重复字符串 , 
  2. 若快指针-慢指针>上一个记录的无重复字符的长度 , 则更新改长度
  3. 快指针不动 , 慢指针走 , 没走一步将将位图中该字符对应的信息删除 ,直到两者指向相同的字符 ,此时快慢指针依旧是错开的,慢指针指向快指针这个字符出现的第一次,快指针指向的是字符出现第二次),此时不删除该字符的信息,慢指针直接加加  例如 : a b c a a d n
  4. 重复上述步骤 , 直到快指针遇到' /0 ' , 最后比较一次长度

代码如下 :

int lengthOfLongestSubstring(char* s) {
    int slen=strlen(s);
    if(slen==0)
        return 0;
    if(slen==1)
        return 1;
    int a[255]={0};
    int ret=0;
    char* end=s;
    char* start=s;
    while(*end){
        if(a[*end]==0)
            a[*end]=1;
        else{
            if(end-start>ret)
                ret=end-start;
            while(*start!=*end){
                a[*start]=0;
                start++;
            }
            start++;
        }
        end++;
    }
    return end-start>ret?end-start:ret;
}