本来是想动态规划,写写的写成了滑动窗口,凑活看看
int lengthOfLongestSubstring(char* s ) {
int len=strlen(s);
if(len==0){
return 0;
}
int dp[len];//记录截止到当前位置的最长不含重复字符串长度
dp[0]=1;//0位置是1
int max=1;//初始化max为1
int j=0;
int last_start=0;//初始化一个量,用于保存当前窗口起点所在位置
for(int i=1;i<len;i++){
int flag=0;
int count=0;
for(j=last_start;j<i;j++){
if(s[j]==s[i]){//如果当前字符前面出现了重复的字符
flag=1;//置flag为1
count=j;//保存离当前位置最近的那个重复位置
}
}
if(flag==0){//如果flag为0,说明前面没有出现重复的,长度加1
dp[i]=dp[i-1]+1;
}
if(flag==1){//如果flag为1,说明出现了重复的,
dp[i]=i-count;//当前索引减离当前位置最近的重复字符的索引,即为当前位置长度
last_start=count+1;//更新窗口起点位置
}
if(dp[i]>max){//如果当前位置长度大于最长长度,更新max
max=dp[i];
}
}
return max;
}