“ 好久没有讲算法啦,今天晚上抽空继续开始我们的算法之旅,今天要讲解的算法题目也是常考的一道。”
老规矩,先放题目,大家可以先自己思考一下,题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度,具体实例如下图所示:
无重复字符的最长子串实例图
这道题的思路我们需要用到滑窗的思路,其实滑窗用到的就是队列。
首先我们应该定义一个变量为queue,它是一个空数组,其作用就是用来存储无重复的字符;
接着我们应该定义一个变量为max,它是number类型且初始值为0,其作用是用来比较每次queue变量长度的最大值,起到一个记录的作用,最后返回即可;
然后定义一个变量i,它是一个number类型且初始值为0,其作用就是用来记录在s中当前的下标值;
最后定义一个变量len,它是s字符串的长度,其作用就是限制i的上线;
接下来就是核心点,也是最重要的思路:
首先我们遍历s,通过indexOf来判断在queue数组中是否存在相同的字符,如果存在的话就让queue数组开头出队列,也就是使用shift方法;相反如果不存在的话,就在queue数组末尾进入队列,也就是使用push方法。
在说了重要的思路之后,不知道此时在屏幕前的你是不是有一点头绪了呢?如果有了思路那么可以先尝试自己实现一下,如果没有的话也没有关系,接下来我会在下面放代码,让你在再对比自己思路在哪里出现了堵塞。
又到了激动人心的时刻,当然如果你有更好的思路和代码,不妨在下方留言,让我欣赏一下神仙打架的感觉,如果你有什么不明白的也欢迎在下方留言,如果我看到一定会回你的。具体代码如下所示:
1 | /** |