怎么从无重复字符的最长子串-算法题
原创题目
给定一个字符串 s ,请找出哪一个不包含重复字符 最长子串 的长度。
思路
滑动窗口
- 如果给定字符长度 小于等于1 ,直接回车长度
- 创建最大长度变量
max
- 初始化两个类似指针变量,
p1=0
,p2=1
,则该值等同于索引。 - 进入while回路
p2
到给定字符的长度,每个循环p2
后退一点,也就是E。p2+=1
- 重复元素的下标是在循环变量中创建的。
sameIndex
,已初始化-1,表示没有重复的元素 - 遍历
从p1开始到p2所有以前的元素
,如果有元素p2
重复,记录复制元素的下标并退出循环。 - 创建临时最大长度
tempMax
- 确定是否存在重复元素
(sameIndex >= 0 ?)
的情况 - 如果存在重复元素,则临时最大长度为
p2-p1
,在这一点上是p1
在重复元素后放置一位数字(p1 = sameIndex+1)
- 如果没有重复的元素,则临时最大长度为
p2-p1+1
- 判断
tempMax
与max
的大小max p2
向后移动一个位置后,进入下一个位置。while循环- 返回
max
代码
var lengthOfLongestSubstring = function (s) {
if (s.length <= 1) {
return s.length
}
// 最大长度
let max = 0
// 类似指针1
let p1 = 0
// 类似指针2
let p2 = 1
while (p2 < s.length) {
// 为重复元素创建下标 是在循环中初始化的-1 表示无重复
let sameIndex = -1
for (let i = p1; i < p2 ; i++) {
// 遍历寻找p2前面是否有重复的元素
if (s[i] === s[p2]) {
// 记录重复元素的下标。 跳出循环
sameIndex = i
break
}
}
// 创建临时最大长度
let tempMax
if (sameIndex >= 0) {
// 存在重复的元素
tempMax = p2 - p1
p1 = sameIndex + 1
} else {
// 没有重复的元素
tempMax = p2 - p1 + 1
}
if (tempMax > max) {
max = tempMax
}
p2 += 1
}
return max
}
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
上一篇:怎么修改Element-UI样式的几种方式 下一篇:怎么进行大数相加算法题