重点在于把ascll码当作record的数组下标,记录是否重复。
int lengthOfLongestSubstring(char * s)
{
if(s == NULL)
return 0;
int head = 0, tail = 0, len = 0; //子串头,子串尾,子串长
bool record[128] = {false};
while(s[tail] != '\0')
{
if(record[s[tail]]) //在子串中已经出现过
{
len = len > (tail - head) ? len : (tail - head); //更新一次长度
while(s[head] != s[tail]) //head后移,清除记录,直到重复的字符为止
{
record[s[head]] = false;
head++;
}
head++;
}
else //在子串中没有出现过
{
record[s[tail]] = true; //把ascll码当作数组下标,记录
}
tail++;
}
len = len > (tail - head) ? len : (tail - head);
return len;
}