zoukankan      html  css  js  c++  java
  • [头条刷题] 判断一个字符串的组合是否为另一个字符串的子串 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一致

  • 相关阅读:
    又是运行不到main的问题
    stlink问题
    AD7124踩过的坑
    stm32上调试AD5410
    linux读xml文件问题
    stm8问题记录
    430 仿真器 问题
    虚拟机VMware显示“内部错误”的解决方法
    VS2008 如何设置字体大小?
    Hyperledger Indy项目
  • 原文地址:https://www.cnblogs.com/theodoric008/p/12774858.html
Copyright © 2011-2022 走看看