刷题练习记录(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

 

posted @ 2019-08-29 15:44  anno_ym雨  阅读(243)  评论(0编辑  收藏  举报