字符串内无重复字符的最长子串长度

 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 }
原文地址:https://www.cnblogs.com/GoldenEllipsis/p/10392518.html