• 567. 字符串的排列


    1. 背

    子串保证的大小肯定一致,只是内容会不同,那么可以用哈希存储s1,用步长为s1.length()的窗口滑动s2,如果两个哈希相等,就是满足条件。

    这个哈希不能用unordered_map因为为0就删除,不等于0–,等于0就创建,不等于0就++,这个操作对于C++的unordered_map太困难了,反正也说了都是小写字母,就用长度为26的数组表示。

    2. 题目

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

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

    示例 1:

    输入:s1 = “ab” s2 = “eidbaooo”
    输出:true
    解释:s2 包含 s1 的排列之一 (“ba”).
    示例 2:

    输入:s1= “ab” s2 = “eidboaoo”
    输出:false

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/permutation-in-string
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    3. 答案

    class Solution {
    public:
        bool checkInclusion(string s1, string s2) {
            if(s1.length()>s2.length())
            return false;
            vectorcharmap(26,0);
            for(auto val : s1)
                ++charmap[val-'a'];
    
            vectorcharmap_new(26,0);
            int left = 0,right = s1.length()-1;
            for(int i=left;i<=right;++i)
                charmap_new[s2[i]-'a']++;
            
            if(charmap==charmap_new)
                return true;
            while(right+1
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    VC++如何使用C++ STL标准模板库中的算法函数(附源码)
    【HTML】表格标签,语义化
    常见的数学物理方程
    博士期间可读的工具书目(含英文原版网盘资源)
    【设计模式】三、概述分类+单例模式
    互联网摸鱼日报(2023-09-18)
    ES6常见用法
    centos安装Python3.8
    1339 - Ancient Cipher (UVA)
    网课没有摄像头,手机如何变成电脑摄像头?
  • 原文地址:https://blog.csdn.net/qigezuishuaide/article/details/127760445