给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int lengthOfLongestSubstring(char * s){
int right=0,left=0,max=0;
int i,j;
int len=strlen(s);得到字符串的长度
int h;
for(i=0;i<len;i++){
if(left<=right){ 检测是否重复,从左到右遍历
h=0;
for(j=left;j<right;j++)
{
if(s[j]==s[right]){
h=1;
break;如果h=1结束该循环
}
}
if(h){
left=j+1;
}
}
max = max < (right - left + 1) ? (right - left + 1): max;比较最大值
right++;
}
return max;
}
这个题是一个思路的问题,思路对了不是很难,这是个滑动窗口的问题,和以前的for循环不同,
以前的for循环,是左面不变,然后一直加加或减减知道跳出循环,而这个则有所不同。这个让i等于的值如果跳出了循环,则让那个等于的值加一,继续进行比较,以这个题为例,这个题就是如果h=1让left加一,并让right也一直加一,这样就可以可以使字符串的进行比较,如果有是s【j】=s【right】那么left加一,然后进行比较取最大值,希望大家可以通过该题,更好的了解滑动窗口,如果没有理解,也可以去b站进行学习,毕竟我的表达能力可能没有那么好,但还是希望对大家有所帮助/