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" 是一个子序列,不是子串。
可以看上面图文思路
若是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;
}
};
上一篇: 拦截导弹(动态规划)