当前位置: 首页 > 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.mrgr.cn/news/21412.html

相关文章:

  • 【深入理解SpringCloud微服务】深入理解nacos配置中心(二)——客户端启动源码分析
  • LLM大模型:将爬虫与大语言模型结合
  • 部署若依Spring boot项目
  • 基于javaweb的茶园茶农文化交流平台的设计与实现(源码+L文+ppt)
  • HTML 基础,尚优选网站设计开发(二)
  • C++ 上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法
  • Java集合
  • 【每日刷题】Day112
  • Danbooru风格图片分享平台szurubooru
  • 【2024高教社杯国赛A题】数学建模国赛建模过程+完整代码论文全解全析
  • 如何从硬盘恢复已删除/丢失的文件?硬盘恢复已删除的文件技巧
  • 分布式光伏的劣势
  • 数据链路层
  • (五十九)第 9 章 查找(B 树)
  • 非空约束(Not Null)
  • 数字化平台跨界融合增值:新起点与新机遇
  • c++修炼之路之特殊类设计与类型转换
  • LoRA微调基础知识点
  • 饲料加工机器设备有哪些组成部分
  • 微信小程序和普通网页有什么不同