题目描述
代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int lengthOfLongestSubstring(char * s);///计算无重复最大子串长度
int main(){
char str[100];
scanf("%s",&str);
printf("最大子串长度为:%d",lengthOfLongestSubstring(str));
return 0;
}
int lengthOfLongestSubstring(char * s){
char* num;///存放子串
int start=0,end=-1;///记录子串开始和结束的位置
int maxlen=0;///记录最大长度
int cutlen=0;///记录当前长度
int i,j;
int len;
len=strlen(s);///原字符串的长度
num=malloc(sizeof(char)*len);
for(i=0;i<len;i++){
j=start;
for(j;j<=end;j++){
if(s[i]==num[j]){///判断子串前面是否含有当前元素
start=j+1;///子串的起始位置从前面与当前元素发生冲突的那个元素的后一位开始计算长度
cutlen=end-j;///重新计算当前子串长度
}
}
num[++end]=s[i];///向子串中添加元素
cutlen++;///当前长度+1
if(cutlen>maxlen){
maxlen=cutlen;///如果当前长度大于最大长度则修改最大长度
}
}
return maxlen;
}