简介:在本篇博客中,我们将探讨如何使用双指针滑动窗口方法解决一个常见的字符串问题:找到给定字符串中最长无重复字符的子串长度。我们将介绍两个解决方案:通用模板版本和优化版本。问题描述:给定一个字符串,找到其中最长的无重复字符的子串。返回其长度。示例: 输入:s = "abcabcbb" 输出:3 解释:最长无重复子串为 "abc",长度为 3。解法1:双指针滑动窗口通用版本在这个解法中,我们使用双指针滑动窗口方法,同时维护一个列表str_list来存储窗口内的字符。快指针(right)遍历整个字符串,慢指针(left)始终在快指针的左侧。当遇到新字符时,将其添加到str_list中;当遇到重复字符时,将慢指针所指字符从str_list中移除,并将慢指针向右移动。在遍历过程中,我们不断更新最长无重复子串的长度。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: str_list = [] left, right, res

1.两数之和from typing import List class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: """ 【空间换时间】 哈希表解法,将值与下标存在哈希表内,遍历时拿和值-当前值=目标值 再判断目标值是否存在哈希表中,如果存在直接返回 Args: nums (List[int]): _description_ target (int): _description_ Returns: List[int]: _description_ """ map = {} for index, value in enumerate(nums): result = targ

递归实现class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]: # 都结束了末尾节点就为None if l1 == None and l2 == None: return None # 补齐 [9,9,9,9] + [9] 的情况 if l1 == None: l1=ListNode(0) if l2 == None: l2= ListNode(0) # 值加 sum = l1.val + l2.val