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 实现 复 ...
随机推荐
- CRC 循环冗余效验
CRC循环冗余效验 利用多项式 x6 + x4 + x3,实际为使用模2除法来做的加密 常用crc多项式有 名称 生成多项式 数值式 简记式 标准引用 CRC-4 x4+x+1 0x1'3 0x3 I ...
- NPIO在指定位置插入新列(附案例和代码)
背景: I could be mistaken as I am not that familiar with NPOI, however, after a minor search, it appea ...
- exceptionx:灵活便捷的Python异常处理库,让异常处理更高效!
exceptionx English | 中文 exceptionx 是一个灵活且便捷的Python异常处理库,允许你动态创建异常类,并提供多种异常处理机制. exceptionx 的前身是 gqyl ...
- (一)Vue 3 项目搭建
确保已安装 16.0 或更高版本的 Node.js,然后在命令行中运行以下命令: npm init vue@latest 这一指令将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工 ...
- GPG公钥的删除与注销
参考: 如何在 Gitee 上使用 GPG 我们通过在本地主机保存GPG私钥,然后在Gitee或Github上保存GPG公钥的方式来实现对git的commit和tag操作的签名. 当GPG公私秘钥对作 ...
- 【转载】 arch linux下nvidia 驱动死机问题
原文地址: https://my.oschina.net/u/947271/blog/288063 ================================================== ...
- python编程中的circular import问题
循环引入,circular import是编程语言中常见的问题,在C语言中我们可以使用宏定义来处理,在c++语言中我们可以使用宏定义和类的预定义等方式来解决,那么在python编程中呢? 其实在pyt ...
- 深入学习JVM-JVM 安全点和安全区域
什么是安全点? 在 JVM 中如何判断对象可以被回收 一文中,我们知道 HotSpot 虚拟机采取的是可达性分析算法.即通过 GC Roots 枚举判定待回收的对象. 那么,首先要找到哪些是 GC R ...
- 图扑 HT for Web 轻松构建组态拓扑结构
在现代的数据可视化和网络管理中,拓扑图是一种非常重要的工具.它可以直观地展示节点(Node)和节点之间的关系(Edge).无论是在 2D 还是 3D 环境中,拓扑图都可以帮助我们更好地理解和管理复 ...
- Error in v-on handler: "TypeError: Cannot read property 'value' of undefined"
Error in v-on handler: "TypeError: Cannot read property 'value' of undefined" 报错如下所示,即 在运行 ...