时间 :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.
解答:因为本题要求的是判断是连续代码不重复,而不是一共有几个不同代码,所以加上。
自己代码:没搞出来,以后努力。