无重复字符的最长子串

it2023-12-16  70

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

自己解答

class Solution: def lengthOfLongestSubstring(self, s: str) -> int: maxlen=0 for j in range(len(s)): ss=s[j:len(s)] # print('ss : ',ss) for i in range(len(ss)): # print(ss[0:i+1]) str_=ss[0:i+1] dic1={} for str1 in str_: dic1[str1]=str1 if len(dic1.keys())==len(str_): thislen=len(str_) if thislen>maxlen: maxlen=thislen else : break return maxlen

执行用时:7612 ms, 在所有 Python3 提交中击败了5.01% 的用户 内存消耗:13.5 MB, 在所有 Python3 提交中击败了14.80% 的用户

大神解答

class Solution: def lengthOfLongestSubstring(self, s: str) -> int: start = maxLength = 0 usedChar = {} for index,char in enumerate(s): if char in usedChar and start <= usedChar[char]: start = usedChar[char] + 1 else: maxLength = max(maxLength, index - start + 1) usedChar[char] = index return maxLength

执行用时:44 ms, 在所有 Python3 提交中击败了99.97% 的用户 内存消耗:13.3 MB, 在所有 Python3 提交中击败了81.26% 的用户 ps : 此代码为leetcode排名靠前的他人所写 为了理清楚逻辑重新改写了一下大神的代码:

class Solution: def lengthOfLongestSubstring(self, s: str) -> int: start = maxLength = 0 usedChar = {} res="" for index, char in enumerate(s): # print("===" ,index , char) if char in usedChar and start <= usedChar[char]: # print('usedChar[char] :',usedChar[char]) start = usedChar[char] + 1 # print('start :',start) res=s[usedChar[char] : index] print('res :' ,res) else: # maxLength = max(maxLength, index - start + 1) # print('maxLength :', maxLength) res=res+char if len(res)>maxLength: maxLength=len(res) print('res :' ,res) usedChar[char] = index return maxLength

通过对比 res 和 输入值s 来理解大神的代码

最新回复(0)