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

Posted ycw1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求字符串的最长无重复字符子串长度相关的知识,希望对你有一定的参考价值。

题目:

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

示例 1:

输入: "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "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;
}

以上是关于求字符串的最长无重复字符子串长度的主要内容,如果未能解决你的问题,请参考以下文章

求两个字符串的最长公共子串,要求输入两个字符串,输出他们的最长公共子串,包括长度。

2021-06-24:求一个字符串中,最长无重复字符子串长度。

leetcode刷题3.无重复字符的最长子串

LeetCode 算法:字符串匹配、最长无重复字符子串长度

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

无重复字符的最长子串