LeetCode中怎么找出字符串中无重复最长子串

发布时间:2021-08-02 15:52:21 作者:Leah
来源:亿速云 阅读:147

LeetCode中怎么找出字符串中无重复最长子串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

题目描述

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

示例

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

题目说明

题目很简单,就是从一个字符串中找出不包含重复字符的最长子串的长度。

该题如果用暴利破解的方法进行循环判断,则时间复杂度直接变为O(n^2),是比较恐怖的。因此,可采取滑动窗口的方法来降低时间复杂度。

什么是滑动窗口?

滑动窗口算法是在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这就降低了问题的复杂度,从而也降低了循环的嵌套深度。滑动窗口主要应用在数组和字符串的场景。

简单示例

先通过一个简单的示例来看一下滑动窗口的运作,比如有一个数组[1,3,5,6,2,2],设定滑动窗口(window)大小为3,那么当窗口从数组开始位置滑动到最终位置时依次计算每个窗口内3个元素的和,表示为sum。

LeetCode中怎么找出字符串中无重复最长子串

上图我们可以看出,随着窗口在数组上向右移动,窗口内的数据也在不断变化,我们只用对窗口内连续区间内的数据进行处理即可。由于区间是连续的,因此当窗口移动时只用对旧窗口的数据进行裁剪处理,这样便减少了重复计算,降低了时间复杂度。

以上图为例,当窗口位于[1,3,5]时,处理完该窗口的数据之后,将窗口向右移动一格,等于是将原有窗口左边的1裁剪掉,然后将窗口右边的6添加上,而整个过程看起来就像窗口在向右移动一样。

对于类似“请找到满足 xx 的最 x 的区间(子串、子数组)的 xx ”这类问题都可以使用该方法进行解决。

滑动窗口的基本步骤

需要注意的是:窗口的移动是按照移动的顺序来进行的;窗口的大小不一定是固定的,可以不断缩小或变大的。

对于滑动窗口算法的基本解题思路,以字符串S示例如下:

其中,第2步相当于在寻找一个「可行解」,然后第3步在优化这个「可行解」,最终找到最优解。左右指针轮流前进,窗口大小增增减减,窗口不断向右滑动。

解题

学习了窗口滑动之后,我们回到LeetCode的题目上,是将上述示例的固定窗口变为了变化大小的窗口,而将求和换成了判断是否包含指定字符。

因此,套用上面的思路来进行分析。以字符串“dvdf”为例,通过下图来演示滑动的过程。
LeetCode中怎么找出字符串中无重复最长子串

在上述流程中,可分解为以下步骤:

理解了上述步骤,我们再来看原题的Java代码实现:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int n = s.length();
        int k = 0, max = 0;
        Set<Character> set = new HashSet<>();
        for(int i=0; i< n; i++){
            if(i != 0){
                set.remove(s.charAt(i-1));
            }

            while(k < n && !set.contains(s.charAt(k))){
                set.add(s.charAt(k));
                k++;
            }
            max = Math.max(max,set.size());
        }
        return max;
    }
}

看完上述内容,你们掌握LeetCode中怎么找出字符串中无重复最长子串的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. Java/Python怎么找出无重复字符的最长子串
  2. LeetCode中怎么移除重复节点

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

leetcode

上一篇:LeetCode中怎么删除排序链表中的重复元素

下一篇:怎么用HTML5实现橡皮擦的涂抹效果

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》