本题思路较清楚,通过一个数组记录各个位置所能够引导的最长字符串的长度即可。
稍微有一点难度在于如何向前寻找时判断已经出现了重复字符串,我采用的思路为只有当前项的长度等于当前长度时,认为尚未出现重复字符串,并更新前项长度++。
1 int max=0; 2 int st[100000]={0};//表示以它为开头的最长不重复字串长度 3 int i=0; 4 char p; 5 while(s[i]!=‘\0‘) 6 { 7 p=s[i]; 8 st[i]=1; 9 max=st[i]; 10 for(int j=i-1;j>=0;j--) 11 { 12 if(s[j]!=p) 13 if(st[j]==max)//消除中间重复项 14 { 15 st[j]++; 16 max++; 17 } 18 else 19 break; 20 else 21 break; 22 } 23 i++; 24 } 25 max=0; 26 for(int j=0;j<i;j++) 27 if (max<st[j]) 28 max=st[j]; 29 return max;
原文地址:https://www.cnblogs.com/trickofjoker/p/10538749.html
时间: 2024-10-08 12:05:36