1 #include <stdio.h> 2 #include <string.h> 3 int lengthOfLongestSubstring(char *s) 4 { 5 int size = strlen(s);/*字符串长度*/ 6 int dict[256]; 7 for(int i=0; i<256; ++i) 8 dict[i] = -1; 9 int maxlen = 0;/*最大无重复字符串长度*/ 10 int start = -1;/*无重复字符串开始的位置*/ 11 for (int i=0; i<size; ++i) 12 { 13 if (dict[s[i]] > start) /*一旦字符有了位置记录 说明字符出现重复*/ 14 { 15 start = dict[s[i]]; /*把该字符上次出现的位置 记录为字符串开始位置*/ 16 } 17 dict[s[i]] = i; /*记录字符出现的位置 更新*/ 18 maxlen = maxlen>i-start? maxlen: i-start;/*实时计算无重复字符串长度*/ 19 } 20 return maxlen;/*返回最大无重复字符串长度*/ 21 } 22 int main() 23 { 24 25 char str[100] = ""; 26 char *p = str; 27 char dict[256] = {0}; 28 29 gets(str); 30 int len = lengthOfLongestSubstring(str); 31 32 for(; *(p+len-1); p++){ 33 char s[20] = ""; 34 strncpy(s, p, len); 35 if(lengthOfLongestSubstring(s)==len){ 36 if(!dict[s[0]]) 37 printf("%s ", s ); 38 dict[s[0]] = 1; 39 } 40 } 41 return 0; 42 }