/*
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
*/
int lengthOfLongestSubstring(char *s) {
int autoLength = 0;//动态长度
int autoLeft = 0;//动态左数第几个字符
int autoDict[256] = { 0 };//key 字符 value存储动态字符位置
int autoMove = 1;//第n个字符
int asc; //ascii 值
while (*s != '\0')
{
asc = *s - 0;
if (autoDict[asc] > autoLeft)//字符再次出现
autoLeft = autoDict[asc];//位置右移
autoDict[asc] = autoMove;//更新存储字符位置
autoLength = (autoLength > autoMove - autoLeft) ? autoLength : autoMove - autoLeft;//刷新最大长度
s++;
autoMove++;
}
return autoLength;
}
int main()
{
char * str = "pwwkew";
printf("pwwkew ---- %d", lengthOfLongestSubstring(str));
getchar();
return 0;
}