1.题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
2.代码:
//table[]用来存储128个ascii码的出现次数,只能是0,1,2,在start->i-1之间的只能是1,2
//从start->i-1要求是无重复字符的字符创
//对一个字符串若从start开始的table[s[i]]为:1,1,,1,1,2(就是i指的那个数,不然不会是2),1,1,2(当前i位置
//此时currlen为8,此时currlen为当前从start->第2个2的长度
//那么直到遇到2之前currlen--,遇见2了就把start设为下一位。
//修改后currlen为从当前start(第一个2后面)->第二个2的长度,currlen==3
//修改后的table[s[i]]为:0,0,0,0,1,1(当前start),1,1,1(当前i位置
int lengthOfLongestSubstring(char* s) {
int table[128];
memset(table,0,sizeof(table));
int maxlen=0,currlen=0,start=0;
for(int i=0;s[i]!='\0';++i){
int num=++table[s[i]];
if(num==2){
if(currlen>maxlen)
maxlen=currlen;
for(int j=start;j<i;++j){
if(s[j]==s[i]){
table[s[j]]=1;
start=j+1;
break;
}
else{
--currlen;
table[s[j]]=0;
}
}
}
else{
++currlen;
}
}
if(currlen>maxlen) //[" "]情况currlen=1,maxlen=1
maxlen=currlen;
return maxlen;
}
3.知识点:
双指针法