力扣刷题1——无重复字符的最长字串

时间 :19/1/3

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

网址:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/comments/

示例:输入: "abcabcbb"

           输出: 3

           解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

他人优秀代码:

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        max_number = 0
        number = 0
        test = ''
        for i in s:                     #i是s从第一个位置的字符到最后一个字符,每次一个
            if i not in test:           #判断i在不在test上面,不在的话 test的下一个为i
                test += i               #number加一   
                number += 1
            else:
                if number >= max_number:
                    max_number = number
                index = test.index(i)
                test = test[(index+1):] + i
                number = len(test)
        if number > max_number:
            max_number = number
        return max_number

        思想:通过一个for循环,判断每一个字符是否重复,如果没重复,number加一,如果重复,将test的代码变为重复后面的代码加上重复的那个。因为本题要求的是判断是连续代码不重复,而不是一共有几个代码,所以可以加上。    

        max_number是最后返回的值,test是一个字符串,for循环的作用是让i每次为s的一个值,判断是否在test,不在说明没有重复,给test加字符,number加一,重点说else,里面的if语句是说如果之前的number大的话就给max number赋予number的值,index函数的作用是判断i在test的哪个位置,返回整数,是i在test的第几个位置,下一行的意思是重新构造一个test字符串,为上述重复字符的下一个字符,并且在字符最后加上i此时代表的字符,number代表此时test的长度。

        一个问题是test = test[(index+1):] + i 这个代码,最后为什么加上i,我试过不加i的话,例子abcabcd返回的会是3. 

       解答:因为本题要求的是判断是连续代码不重复,而不是一共有几个不同代码,所以加上。

自己代码:没搞出来,以后努力。  

 

 

 

 

你可能感兴趣的:(力扣刷题1——无重复字符的最长字串)