一、题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
二、解题思路
举个例子:
i从起始位置开始遍历,到第二个b时(红色箭头位置),可以查到第一个b与之相同(蓝色箭头位置),所以下次查询的开始位置应该是从d开始。
三、代码
int lengthOfLongestSubstring(char* s) {
//count为遍历过程中当时字符串的长度,会随着遍历的情况变化
//start为下次循环开始的位置
//longlenth为返回结果
int count=0,i,j,start=0;
int longlenth=0;
bool isok=true;//为true表示前面没有出现过相同字符
int len=strlen(s);
for(i=0;i<len;i++)
{
isok=true;
for(j=0;j<count;j++)
{
if(s[j+start]==s[i])//前面出现了相同字符,需要更新下次遍历开始的位置
{
isok=false;//为false表示前面出现了相同字符
start=j+start+1;//更新下次遍历开始的位置
break;
}
}
if(isok)//如果第i个字符与前面没有重复,那么当前字符串长度加一,即:count++
{
count++;
if(i==len-1 && longlenth<count) //遍历完毕且当前长度大于最大长度时,更新最大长度
longlenth=count;
}
else
{
if(longlenth<count)
longlenth=count;
count=i-start+1;//count更新为两个相同字符之间的距离
}
}
return longlenth;
}