我是靠谱客的博主 忧郁红牛,最近开发中收集的这篇文章主要介绍LeetCode 3 无重复字符的最长子串,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

利用哈希集合,将每个字符依次放入set中,如果发现有重复字符,将第一次出现的重复字符移出set,当前字符串长度-1,起始的字符左边也需要往右移动(即left+=1),再判断当前字符串长度与最大字符串长度的大小,set中加入当前第二次出现重复的字符,最终返回最长字符串长度。

class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if not s:
return 0
left = 0
lookup = set()
n = len(s)
max_len = 0
cur_len = 0
for i in range(n):
cur_len += 1
while s[i] in lookup:
lookup.remove(s[left])
left += 1
cur_len -= 1
if cur_len > max_len: max_len = cur_len
lookup.add(s[i])
return max_len

再更新一个Go的版本,最近开始学习,先练练手

package main
import "fmt"
func lengthOfLongestSubstrings(s string) int {
// 定义map映射
m := map[byte]int{}
n := len(s)
// 右指针
rk, ans := -1, 0
for i := 0; i < n; i++ {
if i != 0 {
// 映射中删除前一个起点
delete(m, s[i-1])
}
// 判断条件是未出现过并且右指针不出界
// 直到找到已经出现的元素或者到字符串结尾
for rk+1 < n && m[s[rk+1]] == 0 {
m[s[rk+1]]++
rk++
}
// 比较当前最长无重复字符串与之前的比较
ans = max(ans, rk-i+1)
}
fmt.Println(m)
return ans
}
func max(x, y int) int {
if x < y {
return y
}
return x
}
func main()
{
fmt.Println(lengthOfLongestSubstrings("pwwkew"))
}

最后

以上就是忧郁红牛为你收集整理的LeetCode 3 无重复字符的最长子串的全部内容,希望文章能够帮你解决LeetCode 3 无重复字符的最长子串所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部