刷题练习记录(3)——无重复字符的最长子串(JAVA 和 Python)——set()函数/集合
【题号003】无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
(1)Java
【代码参考】
【1】【待补全】
(2)Python
【方法一:我自己的解法,非常慢……】
# -*- coding:UTF-8 -*- class Solution(): def lengthOfLongestSubstring(self,s): """ :param s: str :return: int """ if not s: max=0 else: # sp=s[0] sp2 = s[0] max = 1 pcount = 1 for i in range(1, len(s)): flag = True for j in range(0, len(sp2)): if s[i] == sp2[j]: flag = False sp2 = sp2[j+1:]+s[i] pcount=len(sp2) break if flag == True: pcount = pcount + 1 sp2 = sp2 + s[i] if pcount > max: # sp=sp2 max = pcount return max
【方法二:leetcode的解法,学习一下】
(1)关于set()函数的用法:建立集合,也可以使用 '{}' 建立集合,但是空集合只能使用set()函数,因为若使用 '{}' 建立的是一个空字典dict。
【set是一个无序不重复的序列】
具体set()集合函数用法,参考【https://www.cnblogs.com/cyx-12/p/9234285.html】
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s:return 0 left = 0 lookup = set() n = len(s) max_len = 0 cur_len = 0 for i in range(n): cur_len += 1 while s[i] in lookup: lookup.remove(s[left]) left += 1 cur_len -= 1 if cur_len > max_len:max_len = cur_len lookup.add(s[i]) return max_len