leetcode 3. 无重复字符的最长子串 c++版

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-tu-wen-jiang-jie-by-superychen/

可以看上面图文思路

若是abccdab的情况

a b c c d  a b

指向第二个c的时候 我们发现这个滑动窗口有两个  

那么第一个指针就指向第一个c的下一位:第二个c

a b c c d  a b      第二个c下两个指针

          =

重复以上步 

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
      
	int max = 0;//记录最大长度
	int start = 0;//记录活动窗口起始点
	int wLength = 0;//滑动窗口的宽度
	int left = 0;//可变记录点
	for (wLength = 0; wLength < s.size(); wLength++)
	{
		for (left = start; left < wLength; left++)
		{//从窗口的起始点开始进行比对,若有相同的字符则将起始点重新设置
			if (s[left] == s[wLength])//相当于3个指针start一直指向窗口第一个,left,wlength指 
                                        //向滑动窗口最后一个,这个滑动窗口大小是变的。
			{
				start = left + 1;
				break;
			}
		}
		max = (max > wLength - start + 1) ? max : wLength - start + 1;
             //a = x>y?x:y;   如果x>y,x值赋给a
	}
	return max;

    }
};
发布了7 篇原创文章 · 获赞 0 · 访问量 261

猜你喜欢

转载自blog.csdn.net/qq_42192641/article/details/104506369