LeetCode——3. Longest Substring Without Repeating Characters

3. Longest Substring Without Repeating Characters

写在前面

如果有哪位大神看见了我的这篇解答(包括这一整个系列的)请不要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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值