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
图解
结果
・・・下期再见・・・
参考资料
[1]子串和子序列的区别: https://www.cnblogs.com/wkqweizhi/p/12248401.html
点击下面?[分享]、[赞]、[在看]是对小编最大的支持?