*给定一个字符串,找出其中不包含重复字符串的 最长子串 的长度 *
思路 滑动窗口
- right一直向右循环遍历字符串。
- left改变时刻和方法:right侧新增加的字符,在字符串s中从当前的left->right是否有与之相同的字符,若有则left的值指向相同字符的下一个位置。(删除掉与新加入字符相同字符及以前的部分)
/*
@function: 得到最新的left位置信息
@para1: 字符串
@para2: 当前的left
@para3:当前的right
@para4:新加入的字符
return : 最新的left位置
*/
int LeftPosition(char *s, int left, int right, char c)
{
int index = 0;
for( index = left; index < right; index++)
{
if(s[index] == c)
{
return index+1;
}
}
return left;
}
int lengthOfLongestSubstring(char * s)
{
int MaxLen = 0;
int left = 0, right = 0;
if(NULL == s)
return 0;
for(right=0; s[right]!='\0'; right++)
{
left = LeftPosition(s, left, right, s[right]);
if(right-left + 1 > MaxLen)
{
MaxLen = right-left + 1;
}
}
return MaxLen;
}