3. 无重复字符的最长子串 Golang实现
题目描述
给定一个字符串 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实现的更多相关文章
- leetcode刷题第三天<无重复字符的最长子串>
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...
- [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- [LeetCode] 3. 无重复字符的最长子串
题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...
- day4——无重复字符的最长子串
// 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法 题干 //给定一个字符串,请你找出其中不含有重复字符的 最长子串 ...
- leetcode 刷题(3)--- 无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- 无重复字符的最长子串-LeetCode-第3题-C++
题目:无重复字符的最长子串 题目描述:给定一个字符串,找出不含有重复字符的最长子串的长度. 最长不重复子串可能有很多个,但是其长度只有一种. 方法一:暴力搜索法 方法二:滑动窗口 哈希表:要查找一个元 ...
- 【LeetCode】3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- [LeetCode]无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
随机推荐
- Python 基于Python生成短8位唯一id解决方案
基于Python生成短8位唯一id解决方案 by:授客 QQ:1033553122 测试环境: Win10 Python 3.5.4 实现思路 利用62个可打印字符,通过随机生成32位UUID,由 ...
- AS上的基础中级控件-图形定制
图形Drawable 1.Drawable表达包含了图片色块画布背景等 2.存在res中的Drawable目录下,保存描述性的XML文件 3.各种视图都可以使用该控件如ViewText,Button, ...
- CentOS-7离线安装policycoreutils-python
1.下载相关安装包 policycoreutils-2.5-34.el7.src.rpm 快速下载地址:https://vault.centos.org/7.9.2009/os/x86_64/Pack ...
- 8、SpringMVC之RESTful案例
阅读本文前,需要先阅读SpringMVC之RESTful概述 8.1.前期工作 8.1.1.创建实体类Employee package org.rain.pojo; import java.io.Se ...
- 全球首颗车规5纳米 高性能智驾芯片蔚来神玑NX9031 流片成功
地址: https://weibo.com/tv/show/1034:5060774108790867 https://www.bilibili.com/video/BV1JG411r7LR/
- 关于vue按需引入ElMessage和ElMessageBox未被自动引入到auto-important的问题
相信关于按需引入大家应该都会了,不论是官网还是百度一大堆教程 我这边也是参照https://github.com/youlaitech/vue3-element-admin的写法去写的-----需要的 ...
- 原生js操作dom的总结
一.学习DOM之前需要知道的 1.什么是window? window:是一个全局对象, 代表浏览器中一个打开的窗口, 每个窗口都是一个window对象 2.什么是document? d ...
- CH01_WPF概述
第1章:WPF概述 本章目标 了解Windows图形演化 了解WPF高级API 了解分辨率无关性概念 了解WPF体系结构 了解WPF 4.5 WPF概述 欢迎使用 Windows Presenta ...
- 面试必问之kafka
问题1:消息队列的作用 1. 解耦 快递小哥手上有很多快递需要送,他每次都需要先电话一一确认收货人是否有空.哪个时间段有空,然后再确定好送货的方案.这样完全依赖收货人了!如果快递一多,快递小哥估计的忙 ...
- 从0实现基于Linux socket聊天室-多线程服务器模型-1
前言 Socket在实际系统程序开发当中,应用非常广泛,也非常重要.实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要.高并发服务器从简单的循环服务器模型处理少量网络并发请求 ...