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

【力扣打卡系列】滑动窗口与双指针(无重复字符的最长子串)

坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day7

无重复字符的最长子串
  • 题目描述在这里插入图片描述
  • 解题思路
    • 不含重复字符——》考虑使用哈希表来存储记录
    • 为了提高效率也可以用数组,hash := [128]bool{} (因为存的是字符的ASCLL码,所以开128大小即可),布尔值用于存储当前右端点是否重复
    • 核心思想:遍历右端点,固定右端点,滑动左端点,保证左边绝对没有跟右端点重复的字符(即以右端点为准),有的话就滑动左端点去重复
    • 总的来说,右端点负责扩张长度,左端点负责控制去重,遍历完之后记录下来整个过程中最长的子串长度即可
  • 代码参考
func lengthOfLongestSubstring(s string) int {
    hash := [128]bool{}
    left := 0
    ans := 0
    for right,value := range s{
        for hash[value]{
            hash[s[left]] =false
            left++
        }
        hash[value] = true
        ans = max(ans, right-left+1)
    }
    return ans
}
  • tips(好精妙的一道题)
    • hash := [128]bool{}可以开一个类似于哈希表功能的数组,因为可以存字符的ASCLL码所以设置为128,bool值代表当前值是否有重复的情况(false代表当前没有重复的情况)
    • 更新方式为:遍历右端点,每次设置hash[value] = true,即每次遍历的时候都把右端点的值记录进去
    • 子串长度的计算公式为:right-left+1

http://www.kler.cn/news/357955.html

相关文章:

  • word取消自动单词首字母大写
  • OpenAI Prompt generation - 生成和优化Prompt的Prompt
  • distinct 和 group by
  • 恒定电流下有功率密度,功率密度体积分就是恒定电流的功率
  • 2024最新 无人机 数据集(不定期更新)
  • 【flutter】哪些APP使用了flutter框架开发
  • 如何修改jupyter notebook的工作目录
  • Chromium 加载chrome.dll过程分析c++
  • 使用Spring Boot打造中小型医院网站
  • 使用Three.js和Force-Directed Graph实现3D知识图谱可视化
  • 【高等数学学习记录】极限存在准则,两个重要极限
  • bash之流程控制
  • 基于SSM+微信小程序的电子点餐管理系统(点餐1)
  • 电影评论网站:Spring Boot技术实践
  • 【微服务】微服务API网关详解:提升系统效率与安全性的关键策略
  • 操作系统学习笔记-1.3操作系统引导,虚拟机
  • 【PHP小课堂】一起学习PHP中的反射(一)
  • 【经管】比特币与以太坊历史价格数据集(2014.1-2024.5)
  • 文件工具类 - C#小函数类推荐
  • Docker容器:Docker-harbor 私有仓库的部署与管理