LeetCode 3:《Longest Substring Without Repeating Characters》

本文介绍了一种求解最长无重复字符子串长度的方法,通过动态更新列表来跟踪当前子串的状态,并在遇到重复字符时调整子串范围。

编程思路:及时更新list里面的内容,当出现重复值时,list将删除从开始到list中重复值处,此外也需注意处理到字符串结尾处。

class Solution:
    # @return an integer
    def lengthOfLongestSubstring(self, s):
        li = []
        len_max = 0
        for i in range(len(s)):
            if not s[i:i+1] in li:
                li.append(s[i:i+1])
                # 如果到字符串结尾:
                if i == len(s)-1:
                    len_cur = len(li)
                    len_max = len_cur if len_cur > len_max else len_max 
            else:
                len_cur = len(li)
                len_max = len_cur if len_cur > len_max else len_max
                # 更新li里面的值,出现重复值之前(包含重复值)的全部去除
                # 得到出现重复值的索引
                index = li.index(s[i:i+1])
                # 注意,每次去除li里面第一个元素,因为去除第一个元素后,更新后的li的一个元素是之前li的第二个元素
                for j in range(index+1):
                    li.remove(li[0])
                li.append(s[i:i+1])
        return len_max


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值