【力扣hot100】刷题笔记Day4
2024-02-08 00:42:01
开发
55
前言
在家整个人就犯懒了...学习懒惰+社交懒惰,除了每天做家教,一整天也没做什么正事,要实在不想学习就和去年过年那样看看书也行啊
还是灵神的题解 最清晰,滑动窗口的模板参考【代码随想录】刷题笔记Day5
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = left = 0
window = set() # 维护从下标 left 到下标 right 的字符
for right, c in enumerate(s):
while c in window: # 加入 c 后,窗口内会有重复元素
window.remove(s[left])
left += 1 # 缩小窗口
window.add(c)
ans = max(ans, right - left + 1) # 更新窗口长度最大值
return ans
滑动窗口,先存p的字符数量,右指针遍历s,用完就收缩左指针补,记录长度相同结果
class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
s_len, p_len, res = len(s), len(p), []
counts = [0] * 26 # 长度26值为0的数组
# 存储p串的字符数量
for c_p in p:
counts[ord(c_p) - ord("a")] += 1
# 滑动窗口
l = 0
for r in range(s_len):
counts[ord(s[r]) - ord('a')] -= 1 # 记录
# 当右侧用完了,收缩左侧
while counts[ord(s[r]) - ord('a')] < 0:
counts[ord(s[l]) - ord('a')] += 1
l += 1
# [l, r]长度相同记录结果
if r - l + 1 == p_len:
res.append(l)
return res
后言
下午睡了两小时,我是🐖,滑动窗口的思路重新学了一下,明天继续
原文地址:https://blog.csdn.net/qq_56077562/article/details/136054816
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:https://www.suanlizi.com/kf/1755270700010180608.html
如若内容造成侵权/违法违规/事实不符,请联系《酸梨子》网邮箱:1419361763@qq.com进行投诉反馈,一经查实,立即删除!