LeetCode题解(0003):字符串中无重复字符的最长子串(Python)
发布日期:2021-06-29 19:51:34 浏览次数:3 分类:技术文章

本文共 912 字,大约阅读时间需要 3 分钟。

题目:(中等)

标签:字符串、双指针、哈希表、滑动窗口

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N 2 ) O(N^2) O(N2) O ( N ) O(N) O(N) 3356ms (>5.01%)
Ans 2 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 44ms (>99.97%)

解法一(分别计算以每个字为起点的最长无重复子串):

def lengthOfLongestSubstring(self, s: str) -> int:    ans = 0    for i in range(len(s)):        hashset = set()        sub_ans = len(s) - i        for j in range(len(s[i:])):            if s[i:][j] in hashset:                sub_ans = j                break            hashset.add(s[i:][j])        if sub_ans > ans:            ans = sub_ans    return ans

解法二(分别判断以每个字为结束的最长无重复子串;即遇到重复的字符,则判断是否移动起始下标的位置):

def lengthOfLongestSubstring(self, s: str) -> int:    ans = 0    hashmap = {
} # 距离当前位置最近的字符坐标 now = 0 # 当前长度 for i, ch in enumerate(s): now += 1 if ch in hashmap: now = min(now, i - hashmap[ch]) hashmap[ch] = i ans = max(ans, now) return ans

转载地址:https://dataartist.blog.csdn.net/article/details/106742480 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode题解(0004):寻找两个正序数组的中位数(Python)
下一篇:LeetCode题解(0002):两链表逐项相加(Python)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月14日 03时54分09秒