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

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

欢迎跳转我的主页:羑悻的小杀马特-CSDN博客

目录:

一·题目简述:

二·思路汇总:

三·解答代码:


一·题目简述:

leetcode题目链接:. - 力扣(LeetCode)

二·思路汇总:

哈希+滑动窗口:即窗口里就是固定的len(p);然后比较两个hash表内数据是否完全对着上,如果是那么就保存left,依次循环进行下去。

这里画图说明一下步骤:

这里可以优化一下:

比如在建立hash的时候由于这里都是小写字母;故可以建立可放26个字母的hash(利用映射)  

还有就是这里字母数量少,以及找的只是单个字母,如果要是单个字符串那么,这样再去遍历比较肯定特别麻烦,因此可以考虑在入出窗口的时候就保存count来记录这个窗口内本来有模版hash表内数据的有效字符的个数,画图解释一下:

 

这时此题的要点就差不多了。

三·解答代码:

class Solution {
public:vector<int> findAnagrams(string s, string p) {int n=s.size();vector<int> v;int hash_p[26]={0};//把p内数据映射入哈希表int hash_s[26]={0};//入到窗口的数据for(auto e:p){hash_p[e-'a']++;}int len=p.size();for(int left=0,right=0,count=0;right<n;right++){int in=s[right]-'a';//入窗口数据int out =s[left]-'a';//出窗口数据//入窗口::hash_s[in]++;//这里如果后面直接遍历两个hash表比较,复杂度比较高,故选择开始入数据和出数据都完成记录。if(hash_s[in]<=hash_p[in]){count++;//记录有效字母的个数}//出窗口:if(right-left+1>len){if(hash_s[out]<=hash_p[out]){count--;}hash_s[out]--;left++;1}//出窗口后更新结果:if(count==len){v.emplace_back(left);}}return v;}
};

http://www.lryc.cn/news/432265.html

相关文章:

  • QEMU用户模式测试AARCH64程序
  • 机器学习(五) -- 监督学习(8) --神经网络2
  • 物联网之PWM呼吸灯、脉冲、LEDC
  • Python利用pyecharts实现数据可视化
  • 网恋照妖镜源码搭建教程
  • STM32
  • 用手机做抢答器 低预算知识竞赛活动的选择
  • ELK学习笔记(二)——使用K8S部署Kibana8.15.0
  • 报错:CPU指令集的问题
  • Type-C接口诱骗取电快充方案
  • 图像白平衡
  • SAP Business One 与无锡哲讯:携手共创企业数字化未来
  • Unity Adressables 使用说明(五)在运行时使用 Addressables(Use Addressables at Runtime)
  • 什么是死锁,如何解决?
  • 借助ChatGPT三步,完成课题申报书中研究价值部分写作全攻略指南
  • IDEA取消自动选择光标所在行
  • VUE2.0 elementUI el-input-number 数据更新,视图不更新——基础积累
  • JS中this指向问题
  • 大厂面试:小米嵌入式面试题大全及参考答案(130+道 12万长文)
  • React 更新界面
  • JavaSE-易错题集-001
  • 【人工智能学习笔记】1_人工智能基础
  • 【前端】animation动画以及利用vue制作简单的透明度改变动画,包含vue生命周期实现
  • mysql优化案例分享
  • C语言中结构体struct和联合体union的区别
  • Verilog:【8】基于FPGA实现SD NAND FLASH的SPI协议读写
  • 目标检测-RT-DETR
  • 业务资源管理模式语言09
  • Spring Boot + Vue 多级目录的构建详解
  • Android的Launch