当前位置: 首页 > article >正文

前端算法题

js做算法题-无重复字符的最长子串 求最长不重复字串

要找到一个字符串中无重复字符的最长子串,我们可以使用滑动窗口(Sliding Window)算法。这种方法通过维护一个窗口来追踪当前的子串,并利用一个集合来检查字符是否重复。

算法步骤

  1. 使用两个指针 startend 来表示当前窗口的范围。
  2. 使用一个集合 charSet 来存储当前窗口中的字符。
  3. 初始化 maxLength 变量来记录最长子串的长度。
  4. 遍历字符串,逐个扩展 end 指针:
    • 如果字符不在 charSet 中,添加它并更新 maxLength
    • 如果字符已经存在,移动 start 指针,直到窗口中的字符不再重复。
  5. 返回 maxLength
function lengthOfLongestSubstring(s) {
  let charSet = new Set(); // 用于存储当前窗口中的字符
  let maxLength = 0;       // 最长子串的长度
  let start = 0;           // 窗口的起始指针

  for (let end = 0; end < s.length; end++) {
    // 如果字符已经存在于集合中,移动 start 指针
    while (charSet.has(s[end])) {
      charSet.delete(s[start]); // 从集合中移除 start 指向的字符
      start++;                   // 移动 start 指针
    }
    charSet.add(s[end]);         // 添加当前字符到集合中
    maxLength = Math.max(maxLength, end - start + 1); // 更新最长子串的长度
  }

  return maxLength; // 返回最长子串的长度
}

// 示例用法
const input = "abcabcbb";
console.log(lengthOfLongestSubstring(input)); // 输出: 3


http://www.kler.cn/a/403228.html

相关文章:

  • Cesium 加载B3DM模型
  • Flink升级程序和版本
  • 【Linux】【Shell】Shell 基础与变量
  • Spark RDD 的宽依赖和窄依赖
  • 【leetcode】LCR150.彩灯装饰记录Ⅱ
  • AI数字人视频小程序:引领未来互动新潮流
  • 前端基础的讲解-JS(14)
  • 【AIGC】ChatGPT提示词Prompt解析:情感分析,分手后还可以做朋友吗?
  • LTE Cat 1 无线通信模块 AT 指令使用
  • uni-app Vue3语法实现微信小程序样式穿透uview-plus框架
  • 第7章硬件测试-7.3 功能测试
  • JS一个then方法异步的问题
  • 【模型级联】YOLO-World与SAM2通过文本实现指定目标的零样本分割
  • 原生JS和CSS,HTML实现开屏弹窗
  • 快速简单的视频下载器——lux
  • 部门管理系统功能完善(删除部门、添加部门、根据 ID 查询部门 和 修改部门)
  • 思考Redis的用途 2024-11-19
  • 【数据结构】—— 时间复杂度、空间复杂度
  • 依赖管理(go mod)
  • Android开发实战班 - 网络编程 - WebSocket 实时通信
  • 数据结构-堆排序笔记
  • 本草纲目数字化:Spring Boot在中药实验管理中的应用
  • 【Pytorch】torch.utils.data模块
  • .NET 9与C# 13革新:新数据类型与语法糖深度解析
  • 【课堂笔记】隐私计算实训营第四期:匿踪查询PIR
  • 【软件测试】自动化常用函数