Leetcode 3.无重复字符的最长子串(python)

题目描述:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串(连续的) 的长度,“pwke” 是一个子序列,不是子串。
自己思路:
1.创建一个新的字符串,设置字符串长度对比位。
2.遍历整个字符串,将遍历过的字符串放入新的字符串内。
代码:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        st = {}  #创建新的字典
        i, ans = 0, 0  #两个标志位
        for j in range(len(s)):  #遍历整个字符串
            if s[j] in st:       #如果当前字符在新创建的字符串内 
                i = max(st[s[j]], i)     #返回当前最大字符串长度
            ans = max(ans, j - i + 1)    #ans为绝对最大字符串长度
            st[s[j]] = j + 1
        return ans;

相同思路的另一种方法:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        reslist = ''
        maxcount = 0
        i = 0
        for i in range(len(s)):
            if s[i] in reslist:
                maxcount = max(len(reslist), maxcount)
                while(s[i] in reslist):
                    reslist = reslist[1:]
            reslist += s[i]
        return max(len(reslist), maxcount)

第二种方法时间与空间复杂度更小。
在这里插入图片描述
补充:python中的hash
哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。

一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名 x 到首字母 F(x)的一个函数关系),在首字母为 W 的表中查找 “王” 姓的电话号码,显然比直接查找就要快得多。这里使用人名作为关键字,“取首字母” 是这个例子中哈希函数的函数法则 F(),存放首字母的表对应哈希表。关键字和函数法则理论上可以任意确定。

哈希表是使用 O(1)时间进行数据的插入删除和查找,但是哈希表不保证表中数据的有序性,这样在哈希表中查找最大数据或者最小数据的时间是 O(N)实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值