来个可以做渗透的网站,中铁建设集团有限公司天津分公司,中卫市建设网站,网页设计与制作教程题库LeetCoe-03-无重复字符的最长字串
LeetCode链接:LeetCoe-03-无重复字符的最长字串
题目理解及描述
无重复字符的最长子串难度中等3747给定一个字符串#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最…LeetCoe-03-无重复字符的最长字串
LeetCode链接:LeetCoe-03-无重复字符的最长字串
题目理解及描述
无重复字符的最长子串难度中等3747给定一个字符串请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”所以其长度为 3。 示例 2:输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”所以其长度为 1。 示例 3:输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”所以其长度为 3。 请注意你的答案必须是 子串 的长度“pwke” 是一个子序列不是子串。
思路:
暴力方法: 时间: O(N**2) 空间: O(N) seq_lengths [] for i, token in enumerate(s):
# 遍历每个字符for j in range(i:len(s):# 对于每个开始字符计算其下一次重复或者不重复的最长字串j 1seq_len j - iif s[i] s[j]:breakseq_lengths.aapend(seq_len)return max(seq_lengths) 4. 进一步优化: 内部第二个循环每次从当前位置向后寻找最长无重复字符串, 可以使用 hasMap{}来存储每个字符在字符串中的位置如果遇到重复就进行更新;
思想: 一般方法都是从当前字符往后找,然后找到一个重复的字符停止; 可使用双指针的思路: 左指针指向当前字符, 右指针指向往后找的指针;
自己还没有真正理解清楚这道题; 如果暴力做: 1.当前字符 2. 向后查找 3.判断重复; class Solution():# 方法1: def lengthOfLongestSubstring(self, s:str):hasMap {} res 0 # resultp -1 # 哑节点 记录计算当前最长字符串的起始位置for i, token in enumerate(s):if token in hasMap and hasMap[token] p:p hasMap[token] # 起始位置进行更新 hasMap[token] ielse: hasMap[token] ires max(res, p-i)return res# 方法2: 类似于双指针进一步优化hasMap()def lengthOfLongestSubstring(self, s: str) - int:s list(s)hashmap {}start, end 0,0maxlen 0for i,j in enumerate(s):if j in hashmap:# 这一步自己做肯定会忘记if starthashmap[j]:hashmap[j] ielse:start hashmap[j] 1end 1hashmap[j] imaxlen max([maxlen, end-start])return maxlen # 方法3: 代码进一步整理def lengthOfLongestSubstring(self, s: str) - int:s list(s)hashmap {}start, end 0,0maxlen 0for i,j in enumerate(s):if j in hashmap:# 这一步自己做肯定会忘记if start hashmap[j]:start hashmap[j] 1end 1hashmap[j] imaxlen max([maxlen, end-start])return maxlen
进一步想法: