本来是想动态规划,写写的写成了滑动窗口,凑活看看

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;
}