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

C++优选算法 438. 找到字符串中所有字母异位词

文章目录

  • 1.题目描述
  • 2.算法思路
  • 3.完整代码

1.题目描述

在这里插入图片描述
题目分别给出两个字符串s和p,要求在s中找到所有p的异位词,不必考虑顺序比如:
p=abc,则在s中找到这三个字母连一起的字串便可,如abc、acb、bca、bac、cab、cba都行,并且返回这些字串的个数即可。

2.算法思路

我采用的是滑动窗口+哈希表的做法

  • 定义两个哈希表,由于没有大写字母,哈希表大小为26,下标则是 字母-‘a’ 就可以得出
  • 进窗口:将进入窗口的字母对比是不是在p中出现,如果出现则统计出现个数,使用count来计算
  • 判断:固定一个窗口,使窗口的区间范围,不超过p的大小
  • 出窗口:如果count>p.size()则出窗口,随后count–即可
  • 更新:定义一个ret容器来存储异位词个数,如果count==p.size()放进ret容器即可

3.完整代码

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int hash1[26]={0}; // 存储数组pfor (auto a : p) hash1[a - 'a']++;int m=p.size();int hash2[26]={0};for(int left=0,right=0,count=0;right<s.size();right++){//进窗口char in = s[right];if(++hash2[in-'a']<=hash1[in-'a'])count++;//判断if(right-left+1>m){//出窗口char out = s[left++];if(hash2[out-'a']-- <= hash1[out-'a'])count--;}//更新if(m==count)ret.push_back(left);}return ret;}
};
http://www.xdnf.cn/news/12507.html

相关文章:

  • 【Dv3Admin】系统视图菜单按钮管理API文件解析
  • CodeTop100 Day24
  • 【UEFI系列】SEC阶段讲解
  • 2024年第十五届蓝桥杯青少Scratch初级组-国赛—画矩形
  • Python-15(类与对象)
  • 人工智能初学者可以从事哪些岗位?
  • 逻辑卷和硬盘配额(补充)
  • 会计 - 合并1- 业务、控制、合并日
  • 6个月Python学习计划 Day 16 - 迭代器、生成器表达式、装饰器入门
  • 【汇编逆向系列】八、函数调用包含混合参数-8种参数传参,条件跳转指令,转型指令,movaps 16字节指令
  • 第16届蓝桥杯青少Scratch 4月stema——飞翔的小燕子
  • 二叉树基础全解:存储方式、遍历原理与查找树对比
  • Go垃圾回收参数调优:实现低延迟服务的实战指南
  • MongoDB检查慢查询db.system.profile.find 分析各参数的作用
  • 一篇文章实现Android图片拼接并保存至相册
  • 4082N信号频谱分析仪
  • 设置应用程序图标
  • Android设备推送traceroute命令进行网络诊断
  • 晨控CK-FR102ANS与欧姆龙NX系列PLC配置EtherNet/IP通讯配置操作手册
  • 96.如何使用C#实现串口发送? C#例子
  • 数据结构与算法——二叉树高频题目(1)
  • Oracle数据库学习笔记 - 创建、备份和恢复
  • html表格转换为markdown
  • 测试设计技术全解析:黑盒与白盒测试的七种武器与覆盖率指标
  • 深入解析Java中的装箱与拆箱机制
  • CMOS图像传感器系列--(一)像素设计基础
  • BEV和OCC学习-5:数据预处理流程
  • 全生命周期的智慧城市管理
  • Qemu arm操作系统开发环境
  • Python图像处理基础(五)