LeetCode 567. 字符串的排列

简介: LeetCode 567. 字符串的排列

 567. 字符串的排列

难度中等773

给你两个字符串 s1s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false

换句话说,s1 的排列之一是 s2子串

示例 1:

输入:s1 = "ab" s2 = "eidbaooo"

输出:true

解释:s2 包含 s1 的排列之一 ("ba").


示例 2:

输入:s1= "ab" s2 = "eidboaoo"

输出:false


提示:

    • 1 <= s1.length, s2.length <= 104
    • s1s2 仅包含小写字母


    思路:滑动窗口

    时间复杂度:O(m+n),而题目说明进包含小写字母,长度为26,所以近似O(1)

    空间复杂度:O(m+n),而题目说明进包含小写字母,长度为26,所以近似O(1)

    funccheckInclusion(s1string, s2string) bool {
    length1, length2 :=len(s1), len(s2)
    iflength1>length2 {
    returnfalse    }
    vararr1, arr2 [26]int// 先统计s1中出现的“字符+次数”,顺便初始化s2的滑动窗口arr2fori :=0; i<length1; i++ {
    arr1[s1[i]-'a']++arr2[s2[i]-'a']++// arr2表示长度为length1的滑动窗口    }
    // 若在s2中的前length1长度就包含了s1的排列,直接返回trueifarr1==arr2 {
    returntrue    }
    // 继续遍历s2后续部分的子串fori :=length1; i<length2; i++ {
    arr2[s2[i]-'a']++// 右边界扩大一位arr2[s2[i-length1]-'a']--// 左边界缩小一位ifarr1==arr2 {
    returntrue        }
        }
    returnfalse}

    image.gif


    目录
    相关文章
    |
    算法 C++ 容器
    Leetcode第三十一题(下一个排列)
    这篇文章介绍了LeetCode第31题“下一个排列”的C++解决方案,该算法通过原地修改数组来找到下一个字典序更大的排列,如果不存在则重排为字典序最小的排列。
    117 0
    Leetcode第三十一题(下一个排列)
    |
    6月前
    |
    Go 索引
    【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
    本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
    170 6
    |
    7月前
    |
    存储 机器学习/深度学习 缓存
    🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
    文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
    227 11
    |
    12月前
    |
    JavaScript
    力扣3333.找到初始输入字符串Ⅱ
    【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
    127 1
    |
    C++
    Leetcode第43题(字符串相乘)
    本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
    95 9
    |
    算法 C++
    Leetcode第八题(字符串转换整数(atoi))
    这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
    144 0
    【LeetCode 22】459.重复的子字符串
    【LeetCode 22】459.重复的子字符串
    107 0
    【LeetCode 20】151.反转字符串里的单词
    【LeetCode 20】151.反转字符串里的单词
    102 0
    【LeetCode 19】541.反转字符串II
    【LeetCode 19】541.反转字符串II
    71 0
    【LeetCode 18】6.2.反转字符串
    【LeetCode 18】6.2.反转字符串
    76 0

    热门文章

    最新文章