[不定时一题]LeetCode无重复字符的最长子串

时间:2022-07-25
本文章向大家介绍[不定时一题]LeetCode无重复字符的最长子串,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

LeetCode第三天

好不甘心,夏天就这么过去了

,但是LeetCode之旅才刚刚拉开序幕。

题目

今天带来的是第三题:

一如既往通过题目我们可以了解一些信息`子串`和`子序列`[1],那么什么是子串,什么是子序列呢?

什么是子串

串中任意个连续的字符组成的子序列称为该串的子串

对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符串。字符串"adereegfbw"本身也属于它本身最长的子串。

ab的子串:a、b、ab和一个空子串共4个即(2+1+1)个,abc的子串:a、 b、 c、 ab、 bc 、abc和一个空子串 共(3+2+1+1)个,所以若字符串的长度为n,则子串的个数就是[n*(n+1)/2]+1个,"software"中非空子串的个数就是8+7+....+1=36个。

什么是子序列

子数列,又称子序列,在数学中,某个序列的子序列是从最初序列通过

去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。

“AC”是“ABCDEFG”的子序列,而不是子串。

言归正传题目中还有两个关键字不含有重复字符最长

这里采用数组的方法,定义一个空队列,判断是否存在字符,如果重复则截取数组,如果不存在往定义好的队列里添加。

  • 第一种写法:这里采用Math.max()的方法获取最大值,但是要考虑一种边界值就是如果s=""这种情况。还有一个小细节:s=" "则s.length=1
  • 第二种写法:直接定义maxlength为0

图解

结果