写在前面
如果有哪位大神看见了我的这篇解答(包括这一整个系列的)请不要diss我,说我抄网上教程什么的或者是直接照搬答案解析啥的,我写这个的目的也不是为了出名,就是想在学习编程的路上有一个自己的学习笔记,我的答案确实有很多都是网上大神们整理出来的,但也是在我明白后才借用的。换句话说这类文章就是为了给我自己看的,所以大神们就不要diss我的个人笔记了,不喜欢可以出去。之所以写这个就是在查答案的过程中看到了别人的博客下有这个diss的风气,咱不想被无脑diss啊。
Description
Given a string, find the length of the longest substring without repeating characters.
(ps:人话:就是给一个字符串,从这个字符串中找出最长的没有重复字符的字串)
Examples
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Note that the answer must be a substring, “pwke” is a subsequence and not a substring.
Analysis
solution1
可以设置两个变量,start和end,用来指示字串的开始和结束,end自增,直到遇到重复的字符为止,这时比较字串的长度和max_length,并且更新max_length,然后继续向后移动,检验下一个字符。同时更新字串。
Algorithm
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
max_length = 0
substring = ''
start = 0
for end in range(len(s)):
if s[end] not in substring:
substring += s[end]
else:
max_length = max(max_length,len(substring))
while s[start] != s[end]://重新更新子串,使之子串从重复字符的下一个开始,如pwwkew第一次是start更新完后从第二个w开始,此时新的子串只包括第二个w.
start += 1
start += 1
substring = s[start:end+1]
return max(len(substring),max_length)
Attention:1最后的返回值为return max(len(substring),max_length)的原因在于,如果只输入一个空字符串的话应该返回的最长子串长度为1,而如果直接return max_length的话返回值为0.