力扣——算法入门计划第六天

简介: 力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

 目录

🍕题目

🍔思路

🍟代码

🍕题目

🍔思路:

🍟代码


🍕题目

3. 无重复字符的最长子串

image.png

🍔思路

我们分三步思考 边界确定———>移动规则————>计算长度,并记录,不断更新最长长度

1)我们使用一个左指针表示字符串中的某个子串(或窗口)的左边界,(右边界是在我们判断的下一个重复字符前一位

2)在每一步的操作中,我们会将左指针向右移动一格,但需要保证这对应的子串中没有重复的字符。在python我们有内置函数set()函数来保证没有重复字符;

3)在移动结束后,这个子串长度就对应着 以左边界开始的到右边界的长度。我们记录下这个子串的长度

在统计结束后,我们找到的最长的子串的长度即为答案。

🍟代码

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if not s: return 0
        left = 0
        nowset = set()
        n = len(s)
        max_len = 0
        cur_len = 0
        for i in range(n):
            cur_len += 1
            while(s[i] in nowset):
                nowset.remove(s[left])
                left += 1
                cur_len -= 1
            if cur_len > max_len:max_len=cur_len
            nowset.add(s[i])
        return max_len

image.gif

image.png

🍕题目

567. 字符串的排列

image.png

🍔思路:

题目中强调:

排列不会改变字符串中每个字符的个数,所以只有当两个字符串每个字符的个数均相等时,一个字符串才是另一个字符串的排列

也就是说:排列不讲究顺序,但是字符出现的 种类 和 次数 要恰好对应相等

我们用列表就存各自字母种类 次数 计数

详细见我的代码

🍟代码

class Solution:
    def checkInclusion(self, s1: str, s2: str) -> bool:
        if len(s1)>len(s2):return False
        m,n = len(s1),len(s2)
        dic1 = [0]*26
        dict2 = [0]*26
        #第一步:初始化哈希表
        for i in range(m):
            dic1[ord(s1[i])-ord("a")] += 1 #s1
            dict2[ord(s2[i])-ord("a")] += 1 #s2
        if dic1 == dict2: return True
        #滑动窗口更新哈希表
        for i in range(m,n): #m到n的区间,不包含n
            dict2[ord(s2[i])-ord("a")] += 1 #进
            dict2[ord(s2[i-m])-ord("a")] -= 1 #出
            if dic1 == dict2: return True
        return False

image.gif

image.png

相关文章
|
2月前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
3月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
3月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
56 0
|
4月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
47 2
|
4月前
|
算法
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(二) ----- 力扣/牛客
|
4月前
|
算法 数据挖掘
【栈和队列】算法题 ---- 力扣(二)
【栈和队列】算法题 ---- 力扣
|
4月前
|
存储 算法
【栈和队列】算法题 ---- 力扣(一)
【栈和队列】算法题 ---- 力扣
|
4月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
4月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
4月前
|
算法
【链表】算法题(一) ----- 力扣 / 牛客
【链表】算法题(一) ----- 力扣 / 牛客