1 int lengthOfLongestSubstring(char *s) 2 { 3 int size = strlen(s);/*字符串长度*/ 4 int dict[256] = {0}; 5 for(int i=0; i<256; ++i) 6 dict[i] = -1; 7 int maxlen = 0;/*最大无重复字符串长度*/ 8 int start = -1;/*无重复字符串开始的位置*/ 9 for (int i=0; i<size; ++i) 10 { 11 if (dict[s[i]] > start) /*一旦字符有了位置记录 说明字符出现重复*/ 12 { 13 start = dict[s[i]]; /*把该字符上次出现的位置 记录为字符串开始位置*/ 14 } 15 dict[s[i]] = i; /*记录字符出现的位置 更新*/ 16 maxlen = maxlen>i-start? maxlen: i-start;/*实时计算无重复字符串长度*/ 17 } 18 return maxlen;/*返回最大无重复字符串长度*/ 19 }
1 char str[100] = ""; 2 char *p = str; 3 gets(str); 4 int len = lengthOfLongestSubstring(str); 5 6 for(;*p;p++){ 7 char s[20] = ""; 8 strncpy(s,p,len); 9 if(lengthOfLongestSubstring(s)==len) 10 printf("%s\n",s ); 11 }
原文:https://www.cnblogs.com/GoldenEllipsis/p/10392518.html