当前位置:   article > 正文

算法学习系列:无重复字符的最长子串_不含有重复字符的最长子串 递归

不含有重复字符的最长子串 递归

系列文章目录

算法学习系列:无重复字符的最长子串

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
具体题目信息为:3. 无重复字符的最长子串

环境

软件版本
JDK1.8

正文

一、算法思想

使用滑动窗口算法即可解决该问题。该算法可以用来解决以下两种类型的问题:

  1. 可以解决数组/字符串的子元素问题;
  2. 可以将嵌套的for循环问题,转换为单循环问题,降低时间复杂度

二、算法数据结构

根据问题具体分析使用。本篇博文涉及的题目主要使用哈希表。

三、算法思路

  1. 定义左右指针的起始位置为0,maxLen为0;
  2. 先不断移动右指针,当窗口不满足要求,即是存在重复字符的时候,就停止移动右指针;
  3. 移动左指针,等窗口满足要求,即是为无重复字符的字符串,并更新minLen;
  4. 重复第2、3步至结尾

四、解决代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int max = 0;
        char[]  list = s.toCharArray();
        Map<Integer, Integer> windows = new HashMap<>();
        int left = 0,right = 0;
        int len = 0;
        while (right < list.length) {
            int t = list[right];
            windows.put(t, windows.getOrDefault(t,0)+1);
            right ++;
            while (windows.get(t)>1) {
                int l = list[left];
                windows.put(l, windows.get(l) - 1);
                left ++;
            }
            len = right - left;
            if (max < len) {
                max = len;
            }
        }
        if (max < len) {
            max = len;
        }
        return max;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

五、效率分析

1. 空间复杂度分析

需要使用哈希表进行存储,所以空间复杂度为 O(n)

2. 时间复杂度分析

因为只是对字符串进行遍历计算,所以时间复杂度为 O(n)。

扩展

滑动窗口技巧

总结

多做做算法题,研究一下算法,对自身素养的提升是有很有帮助的!!!

随缘求赞

如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
在这里插入图片描述

拜拜

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/431334
推荐阅读
相关标签
  

闽ICP备14008679号