zoukankan      html  css  js  c++  java
  • LeetCoder题解之Find All Anagrams in a String

    1、题目描述

    2、题目分析

    直接使用 哈希表记录子串的信息,然后对比两个哈希表信息即可

    3、代码

     1 vector<int> findAnagrams(string s, string p) {
     2         
     3         vector<int> b;
     4         if( s.size()  < p.size() )
     5             return  b;
     6         
     7         vector<int> ans;
     8         map<char,int> m;
     9         for(auto c: p){
    10             m[c]++;
    11         }
    12         
    13         map<char,int> sm;
    14         for(int i = 0; i < s.size() - p.size()+1; ++i){
    15            
    16           string sb = s.substr(i,p.size());
    17             if( i == 0){
    18                 for( auto c : sb){
    19                     sm[c]++;
    20                 }
    21             }else{
    22                 if( sm[s[i-1]] <= 1){
    23                     sm.erase(s[i-1]);
    24                 }else{
    25                     sm[s[i-1]]--;
    26                 }
    27                 
    28                 sm[s[i+p.size()-1]]++;
    29             }
    30                
    31             
    32             bool m1 = true , m2 = true ;
    33             for(map<char,int>::iterator it = sm.begin(); it != sm.end() ; it++){
    34                 if( m.find(it->first) == m.end() || m[ it->first] != it->second ){
    35                     m1 = false;
    36                     break;
    37                 }
    38                 
    39             }
    40             
    41             if( m1 ==  true ){
    42                 for(map<char,int>::iterator it = m.begin() ; it != m.end() ; ++it){
    43                     if( sm.find(it->first) == sm.end() || sm[it->first] != it->second){
    44                         m2 = false;
    45                         break;
    46                     }
    47                 }
    48             }
    49             
    50             
    51             if( m1 == true && m2 == true)
    52                 ans.push_back(i);
    53                 
    54         }
    55         
    56         
    57         return ans;
    58         
    59     }
    pp
  • 相关阅读:
    二叉搜索树的后序遍历序列
    验证二叉搜索树
    合并二叉树
    工龄计算方案
    hadoop集群中动态添加节点
    java知识点
    Hadoop经典案例(排序&Join&topk&小文件合并)
    mysql学习
    大数据开发面试
    我保存的网址
  • 原文地址:https://www.cnblogs.com/wangxiaoyong/p/9546095.html
Copyright © 2011-2022 走看看