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

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;}
};

相关文章:

  • 常用操作符,操作符相关笔试题(谷歌)及算法的优化(上)
  • 为什么说数列是特殊的函数
  • golang入门
  • 激活支付宝小程序增长引擎:SCI评分提升的创新实践方案
  • SpringCloud学习笔记-2
  • ComfyUI 中如何使用 Depth ControlNet SD1.5
  • Varjo如何帮助Entrol最大化其XR模拟器的性能
  • F5 GSLB 最佳实践:如何手动将Wide IP 故障转移到另一个数据中心
  • 护网行动面试试题(1)
  • (33)课54--??:3 张表的 join-on 连接举例,多表查询总结。
  • My图床项目
  • STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示
  • 2025.06.06【Ribo-seq】|RiboCode:基于Ribo-seq数据的全基因组翻译ORF检测工具详解与实战流程
  • 中国首套1公里高分辨率大气湿度指数数据集(2003~2020)
  • 电池电压采集之低功耗设计
  • 【vLLM 学习】Cpu Offload Lmcache
  • 2025年6月6日 奇门遁甲与股市
  • 西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?
  • 学习数字孪生,为你的职业发展开辟新赛道
  • 【原神 × 二叉树】角色天赋树、任务分支和圣遗物强化路径的算法秘密!
  • 西安新闻头条今日新闻/宁波优化seo是什么
  • 国外b2b网站是什么意思/高端网站定制
  • seo网站优化方案/站内营销推广方案
  • 免费做司考真题的网站/抖音广告
  • 关于网站开发论文参考文献/百度搜索引擎网址
  • hm网上商城/百度系优化