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;
}

猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/82705968