LeetCode算法题之3. Longest Substring Without Repeating Characters(medium)

声明:

因本人为AI路上的新手,文章用于辅助个人的整理记忆,理解难免有偏差之处,都是个人拙见,如给其他同僚造成困扰,还请见谅,非常非常非常欢迎私信共同讨论,共同进步

题目描述:
Given a string, find the length of the longest substring without repeating characters.

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.

解题思路:

  • 如题所述,给定一字符串,找出其中的没有相同元素的最长的子字符串
  • 那就从第一个元素开始,默认最长的从第一个元素开头,向下遍历字符串,遇到不同的,就加到第一个里面,遇到相同的,就直接break,同时记录长度是多少
  • 下次同样的操作,但是从第二个元素开始,记录长度,与第一个比较,取大者
  • 直至循环完成,找出最大
  • 见代码,一目了然

少废话,上代码:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        max_length = 0#初始化最大长度,设为0

        if len(s) == 1:#字符串长度为1,则最大长度即为本身
            max_length = 1
        else:
            for n in range(len(s) - 1):#外循环,从第一个元素开始到倒数第二个元素结束,按照算法,依次寻找最大长度
                curr_str = s[n]#每次寻找,设置为下一个元素
                for i in range(n + 1, len(s)):#内循环,从初始化的元素的下一个开始
                    if s[i] in curr_str:#说明有重复元素
                        break
                    else:
                        curr_str += s[i]#没有,则加到初始化默认的字符串里
                max_length = max(max_length, len(curr_str))#内循环结束一次后,即每找完一次后,比较长度

        return max_length#最后外循环结束后,返回最大的那个长度

时间空间复杂度:

  • Runtime: 432 ms, faster than 17.22% of Python3 online submissions for Longest Substring Without Repeating Characters.
  • Memory Usage: 13 MB, less than 99.49% of Python3 online submissions for Longest Substring Without Repeating Characters.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值