[路飞]_leetcode-3-无重复字符的最长子串

简介: leetcode-3-无重复字符的最长子串

网络异常,图片无法展示
|


「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战


[题目地址][B站地址]


给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。


示例 1:


输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
复制代码


示例 2:


输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
复制代码


示例 3:


输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列, 不是子串。
复制代码


示例 4:


输入: s = ""
输出: 0
复制代码


提示:


  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成


本题要我们找到不含有重复字符的最长子串,只要遍历字符串中的每个字符,并记录当前子串,当新的字符在子串中出现过,则更新子串,并记录之前长度即可。详细解题思路如下:


  1. 特判当输入字符为空时,返回 0
  2. 创建变量 str 记录当前子串,初始化为空字符串,创建变量 max 记录最长子串长度,因为此时字符串不为空,所以初始化为 1
  3. 遍历字符串,如果该字符在 str 中没有出现过,则 str += s[i],否则通过当前子串长度尝试更新 max,然后更新当前子串为前一个重复字符之后的字符加 s[i]
  4. 最后返回 max 和最后子串的长度的最大值


代码如下:


var lengthOfLongestSubstring = function(s) {
  // 特判
  if(s==='') return 0;
  // 子串
  str = '',
  // 最长子串的长度
  max = 1;
  // 遍历每个字符
  for(let i = 0;i<s.length;i++){
    const ind = str.indexOf(s[i])
    // 如果该字符在子串中现过
    if(ind>-1){
      // 尝试更新最大子串长度
      max = Math.max(max,str.length)
      // 更新子串
      str = str.substr(ind+1)+s[i]
    }else{
      // 如果未出现过,累加字符串
      str += s[i]
    }
  }
  // 返回结果
  return Math.max(max,str.length);
};
复制代码


至此我们就完成了 leetcode-3-无重复字符的最长子串


如有任何问题或建议,欢迎留言讨论!

相关文章
|
2月前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
98 0
Leetcode第三题(无重复字符的最长子串)
|
4月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
6月前
|
存储 算法 数据可视化
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
|
6月前
|
存储 算法 数据可视化
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
|
5月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
37 0
|
6月前
|
存储 算法 程序员
力扣经典150题第三十一题:无重复字符的最长子串
力扣经典150题第三十一题:无重复字符的最长子串
36 0
|
6月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
6月前
|
存储 算法 数据可视化
深入解析力扣159题:至多包含两个不同字符的最长子串(滑动窗口法详细图解)
深入解析力扣159题:至多包含两个不同字符的最长子串(滑动窗口法详细图解)
|
6月前
|
存储 算法 数据挖掘
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
|
7月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”