当前位置: 首页 > news >正文

专题二找到字符串中所有字母异位词

1.题目

题目分析:

题目会给俩个数组,要在大的数组里面去找跟小的数组元素种类一样的子数组,并返回大数组中满足情况的第一个元素地址,就像例子1的abc和cba元素种类一样,就返回第一个元素的地址就行

2.算法原理

题目给定子数组大小是一定的,也就是说在大数组遍历时,就会有个数限制,因为是俩个边界且移动方向是一致的,就可以用滑动窗口,用一个数来计数边界内种类个数,一开始先移动n(限制的种类数大小)下,然后接下来就是n+1个,就要排除元素,那么排除元素还需要判断排的这个元素是否是唯一,如果是唯一就要把种类个数-1,不是就不该变种类个数,然后要插入结果就需要种类数量一致且边界大小一致才行,插入元素要判断是否是第一个进来的,是第一个就要把种类数+1,不然就不变。

排除元素需要注意是先判断删除的元素是否唯一,如果是的话就把种类个数-1,然后把元素排出,如果是先-1的话,再去判断就会导致把元素种类-1,但是它是先-1才变成唯一的,删除后还有一个存在,而就把种类-1了就是错误的。

3.代码实现

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> ret;
        int hash1[26]={0};
        int n=p.size();
        for(char s:p) hash1[s-'a']++;
        int count=0;
        int hash2[26]={0};
        for(int left=0, right=0;right<s.size();right++)
        {
            char in=s[right];
            if(++hash2[in-'a']<=hash1[in-'a']) count++;
            if(right-left+1>n)
            {
                char out=s[left++];
                if(hash2[out-'a']--<=hash1[out-'a']) count--;

            }
            if(count==n) ret.push_back(left);
        }
        return ret;
        
    }
};

相关文章:

  • RuleOS:区块链开发的“新引擎”,点燃Web3创新之火
  • 【初探数据结构】链表OJ算法——快慢指针
  • 算法随打:拼写单词
  • 某Oracle RAC数据库存储配置
  • Windows Docker Desktop 设置中文
  • C++ 继承
  • 【音视频】ffmpeg命令提取像素格式
  • 基于掩码自编码器的可扩展视觉学习者
  • hadoop框架与核心组件刨析(二)HDFS
  • 【我的待办(MyTodolists)-免费无内购的 IOS 应用】
  • ldap和nexus3.75版本相结合之后admin默认走ladp了没有设置权限了
  • Vue 3 组件库持续集成 (CI) 实战:GitHub Actions 自动化测试与 Storybook 文档构建 - 构建高效可靠的组件库 CI 流程
  • leetcode日记(80)复原IP地址
  • SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)
  • socket聊天室—多线程服务器模型
  • 【PAT甲级1505列表排序】结构体排序
  • 【第21节】C++设计模式(行为模式)-Chain of Responsibility(责任链)模式
  • 【Java代码审计 | 第十篇】命令执行漏洞成因及防范
  • Scala:柯里化函数的基本介绍(通俗易懂)
  • 深度学习(斋藤)学习笔记(五)-反向传播2
  • 属于垂直型b2b网站的有/seo优化软件
  • 网站开发人员岗位/哈尔滨网站建设
  • 网站建设步骤与时间表/2345导航网址
  • 政务网站系统/百度推广平台首页
  • 衡水seo_衡水网站建设-燕丰收/免费seo免费培训
  • 营销型和展示型网站/百度站长管理平台