算法练习|Leetcode49字母异位词分词 ,Leetcode128最长连续序列,Leetcode3无重复字符的最长子串,sql总结

一、Leetcode49字母异位词分词

题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 看到小写字母,想到使用哈希ord
  • 将前面出现过的放在字典,再次出现相同的就append

方法:哈希

  • 要用两次循环做哈希,找到每个单层对应的哈希特征
  • 加入字典
  • 打印字典value
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        mp = defaultdict(list)

        for i in strs:
            # 把每个单词特征存好
            pre = [0] * 26
            for j in i:
                pre[ord(j) - ord("a")] += 1
            # 找之前是否出现过
            mp[tuple(pre)].append(i)

        return list(mp.values())
           

总结

  • 新建字典:mp = defaultdict(list),添加value时默认值是[]
  • 字典的key要唯一,数组作为key要变成元组tuple
  • 最终输出字典的所有value:list(mp.values())


二、Leetcode128最长连续序列

题目描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 去重
  • 排序
  • 看下一位是不是当前位+1
  • 更新最大长度

方法:

  • 先用list(set())去重,sort()排序
  • 看下一位是不是当前位+1
  • 更新最大长度
  • 反之,长度变回1
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        if not nums:
            return 0
            
        nums = list(set(nums))  # 去除重复元素
        nums.sort()
        l = 1
        res = 1
        for i in range(len(nums)):
            cur = nums[i] 
            if (i+1)<len(nums) and nums[i+1] == cur+1:
                l += 1
                res = max(res, l)
            else:
                l = 1

        return res
        

总结

  • 思考要不要排序,排序前要不要去重
  • 去除重复元素再排序!!list(set()),.sort()
  • 注意i+1不要超限!!


三、Leetcode3无重复字符的最长子串

题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长
子串的长度。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 双指针
  • 每走一步,用字典记录字符和下标
  • 出现重复的,移动left,更新right

方法:双指针法

  • 每走一步记录 字符:下标
  • 遇到重复的,left移动到之前记录的重复位置+1
  • 更新当前right位置的字典
  • 更新length
  • right += 1
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        left, right = 0, 0
        length = 0
        dic = {}
        while right < len(s):
            if s[right] in dic and dic[s[right]] >= left:
                left = dic[s[right]] + 1
            dic[s[right]] = right
            length = max(length, right - left + 1)
            right += 1

        return length
        

总结

  • left的移动:
    字典中先判断有重复元素
    并且重复元素之前出现的位置在left右边
    移动到重复元素的右边一个位置


sql总结

  • 所有情况都满足才返回
    (当一个产品所有发布时间都要在时间范围内才返回id)
    用count检测:having count(x between ’ ’ and ’ ') = count(*)

心得:积累算法还是要多刷题,在进步了!~

相关推荐

  1. 重复字符长子LeetCode 3

    2024-04-23 10:38:04       50 阅读
  2. leetcode-3.重复字符长子

    2024-04-23 10:38:04       41 阅读
  3. [leetcode] 3. 重复字符长子

    2024-04-23 10:38:04       29 阅读
  4. Leetcode 3. 重复字符长子

    2024-04-23 10:38:04       14 阅读
  5. Leetcode 3. 重复字符长子

    2024-04-23 10:38:04       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 10:38:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 10:38:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 10:38:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 10:38:04       20 阅读

热门阅读

  1. 面试经典150题——加油站

    2024-04-23 10:38:04       9 阅读
  2. RabbitMQ:消息队列的卓越之选

    2024-04-23 10:38:04       10 阅读
  3. kubernetes中的静态POD

    2024-04-23 10:38:04       22 阅读
  4. kitti2bag,py 报错

    2024-04-23 10:38:04       19 阅读
  5. P8739 [蓝桥杯 2020 国 C] 重复字符串

    2024-04-23 10:38:04       15 阅读
  6. hive通过正则过滤其他字段

    2024-04-23 10:38:04       17 阅读
  7. 数学分析复习:洛必达法则、泰勒公式

    2024-04-23 10:38:04       15 阅读
  8. AntD上传文件 结合Axios 服务端由Spring MVC接收

    2024-04-23 10:38:04       13 阅读
  9. Hive第二篇HQL

    2024-04-23 10:38:04       16 阅读
  10. Hive第一篇简介

    2024-04-23 10:38:04       12 阅读
  11. 7、docker 集群

    2024-04-23 10:38:04       16 阅读
  12. 数仓建模—维度建模之维度表

    2024-04-23 10:38:04       18 阅读