• [头条刷题] 判断一个字符串的组合是否为另一个字符串的子串 leetcode 567


    
    
    class Solution {
    public:
        bool checkInclusion(string s1, string s2) {
            if(s1.empty()){
                return true;
            }
            if(s2.empty()){
                return false;
            }
    
            if(s1.size() == 1){
                return s2.find(s1) != std::string::npos;
            }
    
            if(s1.size() > s2.size()){
                return false;
            }
    
            std::unordered_map<char, int> umap1;
            std::unordered_map<char, int> umap2;
    
            for(auto& c: s1){
                umap1[c]++;
            }
    
            for(int i = 0; i < s1.size(); i++){
                umap2[s2[i]]++;
                if(umap1.find(s2[i]) == umap1.end()){
                    umap1[s2[i]] = 0;
                }
            }
    
            if (umap1 == umap2){
                return true;
            }
    
            for(int i = s1.size(); i < s2.size(); i++){
                int left = i - s1.size();
                umap2[s2[left]]--;
                umap2[s2[i]]++;
                if(umap1.find(s2[i]) == umap1.end()){
                    umap1[s2[i]] = 0;
                }
                // print_map(umap1);
                // print_map(umap2);
                if(umap1 == umap2){
                    return true;
                }
            }
            return false;
        }
    };
    
    

    这种方法比较笨, 就是设定一个窗口, 遍历的时候更新窗口, 判断窗口构成的map是否和查询字符串构成的map一致

  • 相关阅读:
    delphi TOpenDialog
    delphi TSaveDialog
    Delphi中一些常用的组合键值
    delphi TColorDialog
    Delphi TFindDialog TReplaceDialog对话框在Memo中的使用
    Delphi ListView基本用法大全
    地球帝国3
    五笔难拆字字根表
    Delphi Format中的换行符号是什么
    myNote
  • 原文地址:https://www.cnblogs.com/theodoric008/p/12774858.html
Copyright © 2020-2023  润新知