剑指 Offer 48. 最长不含重复字符的子字符串
一、题目
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
二、思路
三、代码
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: dic = {} res = tmp = 0 for j in range(len(s)): i = dic.get(s[j], -1) # 获取索引 i dic[s[j]] = j # 更新哈希表 tmp = tmp + 1 if tmp < j - i else j - i # dp[j - 1] -> dp[j] res = max(res, tmp) # max(dp[j - 1], dp[j]) return res
Python 的 get(key,default)方法和 Java 的 getOrDefault(key,default), 代表当哈希表包含键 key 时返回对应 value,不包含时返回默认值 default。
四、分析
复杂度分析:
时间复杂度 O(N) : 其中 N为字符串长度,动态规划需遍历计算 dp 列表。
空间复杂度 O(1): 字符的 ASCII 码范围为 0 ~ 127 ,哈希表 dic 最多使用 O(128)=O(1)大小的额外空间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了