欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-20 11:42:21
...

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

示例 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;

    }
};