求字符串的最长无重复字符子串长度

题目:数组

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

示例 1: code

输入: "abcabcbb" blog

输出: 3 字符串

解释: 由于无重复字符的最长子串是 "abc",因此其长度为 3。 string

示例 2: it

输入: "bbbbb" class

输出: 1 di

解释: 由于无重复字符的最长子串是 "b",因此其长度为 1。 文件

示例 3:

输入: "pwwkew"

输出: 3

解释: 由于无重复字符的最长子串是 "wke",因此其长度为 3。

     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

     这道题经过滑动窗口来解决,经过一个vector/数组 定义256大小,下标表示全部字符,用一个left表示窗口的左边界,i向右滑动,strmax表示最大窗口大小,也是不重复字符的最长字串。经过vector中的字符下标所对应的值和left比较判断窗口中是否出现重复字符,若是出现,left从新更新。可是注意好比   abca(left)cdefa  好比当i走到第三个a时 left的值就会是第二个a的下标数,这样窗口大小就是i-left,恰好不包括left所指的a字符。

//其余头文件自写 #include <vector>
#include<algorithm>
int MaxStr(string str) { vector<int> help(256,-1); int strmax = 0; int left = -1; int len = str.length(); for(int i=0;i<len;i++) { left = max(left, help[str[i]]); help[str.at(i)] = i; strmax = max(strmax, i - left); } return strmax; }
相关文章
相关标签/搜索