LeetCode 第3题 python

3. Longest Substring Without Repeating Characters

不重复字符的最长子字符串

本文题目来自LeetCode OJ,解法不是最优,本人初学python,还望各位多指点。


题目翻译

给定一个字符串,找到不重复字符的最长子字符串的长度。

例子:

  • 给定字符串"abcabcbb",答案是"abc",其中长度是3。
  • 给定字符串"bbbbb",答案是"b",其中长度是1。
  • 给定字符串"pwwkew",答案是"wke",其中长度为3。注意,答案必须是子字符串,"pwke"是一个子序列,但是不是子字符串。

思路

从左往右依次遍历字符串s,如果不在substr中,则加入,如果item在substr中,首先判断目前的子字符串的长度是否为当前最长,然后我们思考下一个子字符串应该是从重复的这个字符的下一个开始的,因为如果在这个字符之前那么必然还是会遇见重复的item的。全部遍历后 判断当前长度是否为最长。
Leetcode的结果是运行82ms 效率是96.61%


代码

def lengthOfLongestSubstring(s):
    """
    :type s: str
    :rtype: int
    """
    # s为空的情况
    if not s:
        return 0
    longestlenth = 1 # 非空子字符串的长度最小为1
    substr = "" # 子字符串
    for item in s:
        if item not in substr:
            substr += item
        else:
            if len(substr) > longestlenth:
                longestlenth = len(substr)
            # 应该从重复的下一个字符开始继续判断
            substr += item
            substr = substr[substr.index(item)+1:]
    if len(substr) > longestlenth:
        longestlenth = len(substr)
    return longestlenth

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值