剑指OFFER----48、最长不含重复字符的子字符串(js实现)

博客提出从只含‘a’~‘z’字符的字符串中找出最长不包含重复字符的子字符串并计算其长度的问题,如‘arabcacfr’中最长无重复子串‘acfr’长度为4,还给出了leetcode地址,解题思路为双指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

  • 请从字符串中找出一个最长的不包含重复字符串的子字符串,计算该最长子字符串的长度。假设字符串中只包含‘a’~‘z’的字符。

例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4。

leetcode地址:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/


思路

  • 双指针

代码

/**
 * @param {string} s
 * @return {number}
 * 双指针
 */
var lengthOfLongestSubstring = function (s) {
  if (!s) return 0
  const map = {}
  let left = 0
  let right = 0
  let max = 0
  while (right < s.length) {
    if (!map[s[right]]) {
      map[s[right]] = true
    } else {
      while (s[left] !== s[right]) {
        map[s[left]] = false
        left++
      }
      left++
    }
    max = Math.max(max, right - left + 1)
    right++
  }
  return max
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值