LeetCode 3-- 无重复字符的最长子串 ( Longest Substring Without Repeating Characters )
程序员文章站
2022-07-13 21:09:37
...
题目描述 :
思路 : 这里可以借助位图的思想去解决该问题 , 位图传送门 -- https://blog.csdn.net/ds19980228/article/details/82592294
- 使用两个指针 , 一个快指针 , 一个慢指针 , 快指针先走 , 每走一步,判断快指针所指字符在位图中是否已经存在,不存在,存储字符信息并继续走,直到快指针指向重复字符串 ,
- 若快指针-慢指针>上一个记录的无重复字符的长度 , 则更新改长度
- 快指针不动 , 慢指针走 , 没走一步将将位图中该字符对应的信息删除 ,直到两者指向相同的字符 ,此时快慢指针依旧是错开的,慢指针指向快指针这个字符出现的第一次,快指针指向的是字符出现第二次),此时不删除该字符的信息,慢指针直接加加 例如 : a b c a a d n
- 重复上述步骤 , 直到快指针遇到' /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;
}
下一篇: 百度地图显示多点连线+数字标注