LeetCode 003:无重复字符的最长子串
题目地址
https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
题目描述
1 | 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 |
解法 滑动窗口+双指针
思路
- 因为需要找无重复的子串,我们可以定义初始化的子串是第一个字符,也就是
let newStr = str[0]
。
- 因为需要找无重复的子串,我们可以定义初始化的子串是第一个字符,也就是
- 然后我们每次往后去加一个字符也就是 str[i]。
- 这时候就需要判断 str[i]是否在 newStr 中,并且知道它所在的位置,
let j = newStr.indexOf(str[i]);
。
- 这时候就需要判断 str[i]是否在 newStr 中,并且知道它所在的位置,
- 如果 j 为-1 就是 newStr 不存在 str[i],就是把 str[i]的数据加到 newStr 的后面,
newStr = newStr + str[i]
;否则,从 j 的位置删除前面的数据后,再加上 str[i],newStr = newStr.substring(j+1,newStr.length);newStr = newStr + str[i]
- 如果 j 为-1 就是 newStr 不存在 str[i],就是把 str[i]的数据加到 newStr 的后面,
- 最后将存的最大值和当前的最大值比较。
- 循环上述操作,从而得出最后的最大值 max。
代码一
使用方法:indexOf + substring + Math.max
1 | /** |
代码二
使用方法:push + splice + indexOf + charAt + Math.max
代码二的逻辑基本与代码一一致,唯一区别在于方法的使用
1 | const lengthOfLongestSubstring = function (s) { |
代码三
使用方法:Map 数据结构 + Math.max
代码三的思路也是与代码一一致,优点:indexOf 会自带循环获取下标的逻辑,时间上会比 Map 慢
1 | const lengthOfLongestSubstring = function (s) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 易函123!
评论