当前位置: 首页 > 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;}
};

相关文章:

  • 深度图可视化
  • opencv函数展示4
  • 《TCP/IP详解 卷1:协议》之第三章:IP:网际协议
  • 数码管静态显示一位字符(STC89C52单片机)
  • 【架构】-- StarRocks 和 Doris 介绍与选型建议
  • 使用open3d将pcd点云按照颜色等级分块显示并令其随颜色变化播放
  • 【EasyPan】项目常见问题解答(自用持续更新中…)
  • 论文笔记-arXiv2025-FilterLLM
  • 【论文阅读23】-地下水预测-TCN-LSTM-Attention(2024-11)
  • 24.中医知识问答删除历史对话功能前端代码实现
  • 基于Redis实现高并发抢券系统的数据同步方案详解
  • candence allegro 17.4 如何永久更改快捷键
  • LangGraph(一)——QuickStart样例中的第一步
  • Lucky配置反向代理+Https安全访问AxureCloud服务(解决证书续签问题)
  • 基于Hadoop的音乐推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
  • Linux基础学习--linux的文件权限与目录配置
  • C++ 封装成DLL,C#调用
  • Linux卸载删除gitlab
  • JVM内存模型与垃圾回收
  • cgroup threaded功能例子
  • 执政将满百日,特朗普政府面临国内“三重暴击”
  • 协信远创620亿元债务重整计划获法院批准:冯仑入局,部分核心资产已提前转让
  • 美方因涉港问题对中国官员滥施非法单边制裁,外交部:强烈谴责,对等反制
  • 沙龙 | 新书分享:中国电商崛起的制度密码
  • 心源性猝死正“猎杀”年轻人,这几招保命法则要学会
  • 从板凳席到指挥台,横扫广东男篮的少帅潘江究竟有何神奇