题目描述

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

注意区分子串和子序列。

示例 3:

输入: s = "pwwkew"

输出: 3

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

思路分析:

1.输入:字符串

2.目标:最长子串

3.困难: 会有重复的字符,这会导致子串无效,同时需要继续向后搜索。 滑动窗口就很适合这个问题。 重点是如何知道当前的字符是否出现过,有两个解决办法:1.使用一个数组来记录各个字符的频率,因为都是英文字符,那么就是ASCII码的范围,0-127.2.使用一个哈希表来记录

解法一(滑动窗口+数组记录频率):

点击查看代码
func lengthOfLongestSubstring(s string) int {
if len(s) == 0 {
return 0
}
left, right := 0, 0
var freq [127]int
result := 0 for right < len(s) {
if freq[s[right]] == 0 { // 如果右侧字符未出现
freq[s[right]]++
right++
} else { // 否则,移动左指针
freq[s[left]]--
left++
}
result = max(result, right-left) // 更新最大子串长度
}
return result
}

解法二(滑动窗口+哈希表):

点击查看代码
func lengthOfLongestSubstring(s string) int {
if len(s) == 0 {
return 0
} charIndexMap := make(map[byte]int) // 哈希表存储字符的最新出现位置
maxLength := 0
left := 0 // 滑动窗口左边界 for right := 0; right < len(s); right++ {
// 如果当前字符在哈希表中存在,并且它的索引大于等于左边界,说明它重复了
if idx, found := charIndexMap[s[right]]; found && idx >= left {
left = idx + 1 // 将左边界移动到重复字符的下一个位置
} // 更新当前字符的最新出现位置
charIndexMap[s[right]] = right // 计算窗口的长度并更新最大长度
maxLength = max(maxLength, right-left+1)
} return maxLength
}

3. 无重复字符的最长子串 Golang实现的更多相关文章

  1. leetcode刷题第三天<无重复字符的最长子串>

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...

  2. [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  3. [LeetCode] 3. 无重复字符的最长子串

    题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...

  4. day4——无重复字符的最长子串

    // 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法 题干 //给定一个字符串,请你找出其中不含有重复字符的 最长子串 ...

  5. leetcode 刷题(3)--- 无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...

  6. Leetcode(三)无重复字符的最长子串

    3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...

  7. 无重复字符的最长子串-LeetCode-第3题-C++

    题目:无重复字符的最长子串 题目描述:给定一个字符串,找出不含有重复字符的最长子串的长度. 最长不重复子串可能有很多个,但是其长度只有一种. 方法一:暴力搜索法 方法二:滑动窗口 哈希表:要查找一个元 ...

  8. 【LeetCode】3. 无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  9. [LeetCode]无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...

  10. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

随机推荐

  1. 第九节 JMeter基础-高级登录【接口关联-鉴权】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:电商的功能:登录.加入购物车.提交订单.问题:谁把什么商品加入了购物车?这时需要把上一个接口的响应数据(登录成功后返回 ...

  2. 浅析JS构造函数

    构造函数(Constructor Function)是 JavaScript 中创建对象的一种重要方式,它不仅让我们能够创建具有相似属性和方法的对象,还能充分利用 JavaScript 的原型继承机制 ...

  3. C# 枚举帮助类EnumHelper(获取描述、名称和数值)

    帮助类定义 public class EnumHelper { #region 静态方法 public static Dictionary<string, string> GetEnumD ...

  4. JavaScript小技巧~this的保存

    在JavaScript中如果一个函数返回一个函数,此时this容易丢失,为了不使this丢失,需要在函数内部保存this. change() { let _this=this return funct ...

  5. pytest批量执行多个测试文件(批量执行一个文件夹下的所有测试用例)

    图片 代码 #!/usr/bin/env python # @File : test_runall.py import pytest import os # path = os.path.dirnam ...

  6. yum密钥报错

    解决报错 [root@node3 mnt]# cat /etc/yum.repos.d/local.repo [BaseOS_repo] baseurl = file:///mnt/BaseOS en ...

  7. Jmeter边界提取器

    组件路径:HTTP请求->右键添加->后置处理器->边界提取器 用途:边界提取器(Boundary Extractor)是放在Sample请求之后执行的,用于获取左右边界中间的所有字 ...

  8. 13、SpringMVC之异常解析器

    13.1.环境搭建 创建名为spring_mvc_exception的新module,过程参考9.1节和9.5节 13.1.1.创建错误提示页 <!DOCTYPE html> <ht ...

  9. 【Mycat】01 概述

    什么是Mycat? 数据库中间件 中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通. 例子:Tomcat,web中间件. 数据库中间件:连接java应用程序和数据库 为什么要用 ...

  10. 【Spring】07 后续的学习补充 vol1

    控制反转Inverse Of Control的演变: 在之前的原生Javaweb项目的问题: 我们三层架构每一层之间的联系是这样的: 由GradeDao接口指向GradeDaoImpl 再由Grade ...