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

题目链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-interview-150
题目描述:
在这里插入图片描述
思路:典型的 双指针+hash,定义两个指针left,right,用于维护一个没有重复字符的区间,这个区间内的字符都是没有重复的,初始时候left和right都指向同一个位置,right指针会在遍历字符串时候一直++,在right++的过程中会将每个字符添加到hash结构中,left++的条件是当right++遇到了重复字符的时候,开始进行区间去重(更新left的位置,使得[left,right]没有重复字符),跑到下一个使得当前区间[left,right]没有重复字符的位置。并且在遇到重复字符时候,先计算答案,再去更新left指针。最后整体遍历完了在计算一遍答案即可。

代码:

func lengthOfLongestSubstring(s string) int {
	n := len(s)
	if n <= 1 {
		return n
	}
	maps := make(map[byte]struct{}, len(s))
	left, right := 0, 0
	ans := 0

	for ; left <= right && right < n; right++ {
		if _, ok := maps[s[right]]; ok { // 包含了则计算答案,然后移动左指针直到不包含
			ans = max(ans, right-left) //计算答案
			for ; left <= right; left++ { // 更新left指针和map,直到区间没有重复字符
				if _, ok := maps[s[right]]; ok {
					delete(maps, s[left])
				} else { // 当前位置还没添加map的,需要添加进去
                    maps[s[right]] = struct{}{}
					break
				}
			}
		} else {
			maps[s[right]] = struct{}{}
		}
	}
	ans = max(ans, right-left)
	return ans
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

相关推荐

  1. 重复字符长子LeetCode 3

    2024-04-21 18:28:04       70 阅读
  2. leetcode-3.重复字符长子

    2024-04-21 18:28:04       60 阅读
  3. [leetcode] 3. 重复字符长子

    2024-04-21 18:28:04       47 阅读
  4. Leetcode 3. 重复字符长子

    2024-04-21 18:28:04       41 阅读
  5. Leetcode 3. 重复字符长子

    2024-04-21 18:28:04       38 阅读
  6. LeeCode 3. 重复字符长子

    2024-04-21 18:28:04       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 18:28:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 18:28:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 18:28:04       87 阅读
  4. Python语言-面向对象

    2024-04-21 18:28:04       96 阅读

热门阅读

  1. C#基础|StringBuilder字符串如何高效处理。

    2024-04-21 18:28:04       41 阅读
  2. 36-5 Python 编写poc基础

    2024-04-21 18:28:04       40 阅读
  3. 运维前端vue部署

    2024-04-21 18:28:04       37 阅读
  4. Android开发如何从入门进阶到架构

    2024-04-21 18:28:04       38 阅读
  5. linux下安装mysql和主从搭建_亲测成功

    2024-04-21 18:28:04       34 阅读
  6. 蓝桥杯第859题——旅行

    2024-04-21 18:28:04       38 阅读
  7. 【k8s】(四)kubernetes1.29.4离线部署之-组件安装

    2024-04-21 18:28:04       35 阅读
  8. ElasticSearchDSL

    2024-04-21 18:28:04       36 阅读
  9. 深度学习框架比较:TensorFlow vs PyTorch

    2024-04-21 18:28:04       40 阅读
  10. Flask、Django和Tornado怎么选

    2024-04-21 18:28:04       38 阅读
  11. ollama 开源大语言模型平台

    2024-04-21 18:28:04       38 阅读
  12. 嵌入式学习——C语言基础——day4

    2024-04-21 18:28:04       36 阅读
  13. MapReduce分区机制(Hadoop)

    2024-04-21 18:28:04       37 阅读
  14. 如何在SpringBoot中集成MyBatis?

    2024-04-21 18:28:04       39 阅读
  15. tomcat中Pipeline-Valve解析

    2024-04-21 18:28:04       37 阅读