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


    目录
    相关文章
    |
    1月前
    |
    算法 C++ 容器
    Leetcode第三十一题(下一个排列)
    这篇文章介绍了LeetCode第31题“下一个排列”的C++解决方案,该算法通过原地修改数组来找到下一个字典序更大的排列,如果不存在则重排为字典序最小的排列。
    28 0
    Leetcode第三十一题(下一个排列)
    |
    17天前
    |
    JavaScript
    力扣3333.找到初始输入字符串Ⅱ
    【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
    30 1
    |
    1月前
    |
    C++
    Leetcode第43题(字符串相乘)
    本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
    23 9
    |
    1月前
    |
    算法 C++
    Leetcode第八题(字符串转换整数(atoi))
    这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
    15 0
    |
    1月前
    【LeetCode 22】459.重复的子字符串
    【LeetCode 22】459.重复的子字符串
    27 0
    |
    1月前
    【LeetCode 20】151.反转字符串里的单词
    【LeetCode 20】151.反转字符串里的单词
    18 0
    |
    1月前
    【LeetCode 19】541.反转字符串II
    【LeetCode 19】541.反转字符串II
    19 0
    |
    1月前
    【LeetCode 18】6.2.反转字符串
    【LeetCode 18】6.2.反转字符串
    14 0
    |
    3月前
    |
    存储 算法
    LeetCode第43题字符串相乘
    LeetCode第43题"字符串相乘"的解题方法,通过使用数组存储乘积并处理进位,避免了字符串转换数字的复杂性,提高了算法效率。
    LeetCode第43题字符串相乘
    |
    3月前
    |
    算法 Java
    LeetCode第28题找出字符串中第一个匹配项的下标
    这篇文章介绍了LeetCode第28题"找出字符串中第一个匹配项的下标"的两种解法:暴力解法和KMP算法,并解释了KMP算法通过构建前缀表来提高字符串搜索的效率。
    LeetCode第28题找出字符串中第一个匹配项的下标