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

483. 找到字符串中所有的字母异位词

一、简单分析

特殊情况:主串没有模式串长,那么肯定没有所谓的异位词了。

我们可以创建两个类似哈希表的数组,在一个窗口中,主串和模式串所对应的哈希数组相等,说明这个窗口中两则字符数量是相同的,也就满足异位词。

当然,移动窗口的过程中,主串上个窗口最左端的字符所对应哈希数组数组值-1,新窗口最右端的字符所对应的哈希数组值+1。

二、算法逻辑

  • 创建两个哈希数组用来存储26字符
  • 窗口还没移动时,起始位置为0,若满足两个数组相同,就保存
  • 窗口移动时,主串上个窗口最左端的字符所对应哈希数组数组值-1,新窗口最右端的字符所对应的哈希数组值+1

三、代码逻辑

class Solution {
public:vector<int> findAnagrams(string s, string p) {//如果主串没有模式串长//2个计数数组分别存储26个字符,用来比较//一个数组用来保存结果//窗口没有移动时//比较两个计数数组,将起始位置0推入数组//每移动一步,主串最左端减1,最右端加1//比较两个计数数组,将起始位置推入数组}
};

完整代码

class Solution {
public:vector<int> findAnagrams(string s, string p) {int ssize = s.size();int psize = p.size();//如果主串没有模式串长if(ssize < psize){return vector<int> ();}//2个计数数组分别存储26个字符,用来比较vector<int> scount(26);vector<int> pcount(26);//一个数组用来保存结果vector<int> ans;//窗口没有移动时for(int i = 0; i < psize; i++){++scount[s[i] - 'a'];++pcount[s[i] - 'a'];}//比较两个计数数组,将起始位置0推入数组if(scount == pcount)ans.push_back(0);//每移动一步,主串最左端减1,最右端加1for(int i = 0; i < ssize - psize; i++){--scount[s[i] - 'a'];++scount[s[i + psize] - 'a'];//比较两个计数数组,将起始位置推入数组if(scount == pcount)ans.push_back(i + 1);}return ans;}
};

http://www.xdnf.cn/news/68167.html

相关文章:

  • Linux 进程与线程间通信方式及应用分析
  • 分布式数据库TiDB:架构、核心特性与生产实践(分库分表)
  • 基于selenium框架的web应用自动化测试系统的设计与实现 毕业论文开题
  • Linux-网络基础
  • Spring_MVC 高级特性详解与实战应用
  • HTTP参数污染
  • Cribl 利用表向event 中插入相应的字段-example-01
  • 为零基础及不同背景学习者设计的 人工智能全栈学习路线图
  • git 版本提交规范
  • Linux 网络基础(三) TCP/IP协议
  • AI大模型 —— 国产大模型 —— 华为大模型
  • 卸载工具:IObit Uninstaller Pro v14.3.0 中文绿色专业便携版
  • IO流--字节流详解
  • linux安装mysql数据库
  • 如何下载适用于超宽屏显示的Google Chrome浏览器
  • CMake笔记:find_package工作原理
  • 如何清理Windows系统中已失效或已删除应用的默认打开方式设置
  • 国产DTU!工业DTU“性能翻倍+功耗减半”双突破!
  • 中科院数据生成赋能具身导航!WCGEN:基于世界一致性数据生成的视觉语言导航
  • 退役淘汰的硬盘数据安全处置不可忽视-硬盘数据抹除清零
  • 目标检测:视觉系统中的CNN-Transformer融合网络
  • LeetCode面试经典 150 题(Java题解)
  • c++_csp-j算法 (3)
  • HXBC编译相关错误
  • 【数论】快速幂
  • 用自然语言指令构建机器学习可视化编程流程:InstructPipe 的创新探索
  • 策略模式:思考与解读
  • 记一次 .NET某旅行社酒店管理系统 卡死分析
  • 剑指offer经典题目(五)
  • 数据库管理-第317期 Oracle 12.2打补丁又出问题了(20250421)