题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
方法:
int lengthOfLongestSubstring(char * s){
int count=1; //用来计数
int max=1; //用来记录最大长度
int k=0; //滑动开始位
//判断是否为空
if(*s=='\0') return 0;
//遍历比较,不等时,计数在增加,相等时,
for(int i=0;s[i]!='\0';i++){
for(int j=k;j<i;j++){
if(s[i]!=s[j]){
count++;
}else{ //出现重复后跳出此次比较
k=j+1; //滑动比较窗口,从下一个不重复的开始
break; //直接跳出,出现重复的时候不需要再计算是否为最大数
}
max = count>max ? count:max; //判断是否为最大数
}
count=1; //重置进行新一轮比较
}
return max;
}
解析:1> 首先定义一个计数器 count 来计数出现无重复字符的个数;
2> 再定义一个max保存当前最长子串的个数;
3> 定义一个滑动下标,以便出现相同字符,滑动下标跳过该字符,到下一个再计算;
4> 遍历比较,不等时计数器 count++ ;相等时跳过该字符重新计算最长值;
5> 重新遍历时应注意要将count 置为1,最后返回最长子串个数。