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

力扣438:找到字符串中所有的字母异位词

力扣438:找到字符串中所有的字母异位词

  • 题目
  • 思路
  • 代码

题目

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

思路

我们先不看异位词这个条件,如何在字符串s中找到字符串p。我们可以构造一个和字符串p相同长度的窗口并且让这个窗口一位一位的进行移动例如字符串p的长度是3那么最开始窗口就是[0,1,2],移动一位变成[1,2,3]这样循环往复。在每次移动之前我们都对这个窗口进行判断,判断窗口内的子串是否和字符串p相同。
那么这道题不也是一样的思路吗只是从判断是否相同变成了判断是否是异位词。那么重点就是如何判断是异位词,如果两个字符串互为异位词那么他们的共性是什么?拥有的字符数量是相同的字符也是相同的,所以我们可以分别创建一个26个字母的数组用来存储窗口和字符串p的字符数量,只要两个数组相同就说明是异位词。

代码

class Solution {
public:vector<int> findAnagrams(string s, string p) {int ssize = s.size();int psize = p.size();vector<int> res;// 如果s字符串还没p字符串长那就没有答案if (ssize < psize) {return res;}// 创建两个数组来存储// 两个字符串每个字符的数量vector<int> schar(26);vector<int> pchar(26);// 构造和字符串p相同长度的滑动窗口for (int i = 0; i < psize; i++) {schar[s[i] - 'a']++;pchar[p[i] - 'a']++;}if (schar == pchar) {res.push_back(0);}for (int i = 0; i < ssize - psize; i++) {// 进行滑动schar[s[i] - 'a']--;schar[s[i + psize] - 'a']++;if (schar == pchar) {res.push_back(i + 1);}}return res;}
};
http://www.xdnf.cn/news/1320031.html

相关文章:

  • Django前后端交互实现用户登录功能
  • [python学习记录2]变量
  • 脉冲计数实现
  • Docker之自定义jkd镜像上传阿里云
  • 排列组合+数量+资料
  • 25. 能否创建一个包含可变对象的不可变对象
  • 编程算法实例-Armstrong数(阿姆斯特朗数)
  • IDE/去读懂STM32CubeMX 时钟配置图(有源/无源晶振、旁路/晶振模式、倍频/分频)
  • 负载测试与压力测试详解
  • Rust Async 异步编程(五):执行器和系统 I/O
  • Spring 创建 Bean 的 8 种主要方式
  • MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型
  • 【SpringBoot】Swagger 接口工具
  • 如何在Windows系统中更改用户名(中文转英文全流程)
  • 云原生俱乐部-RH134知识点总结(2)
  • MySQL数据库备份与恢复
  • neo4j导入导出方法
  • 25年第十本【金钱心理学】
  • 半敏捷卫星观测调度系统的设计与实现
  • 《WINDOWS 环境下32位汇编语言程序设计》第3章 使用MASM
  • Effective C++ 条款46:需要类型转换时请为模板定义非成员函数
  • Critic-V: VLM Critics Help Catch VLM Errors in Multimodal Reasoning(CVPR 2025)
  • 飞算AI 3.2.0实战评测:10分钟搭建企业级RBAC权限系统
  • 【牛客刷题】求四个数的最小公约数:两种高效解法详解(枚举法和最大公约数法)
  • 华为云之Linux系统安装部署Tomcat服务器
  • 【技术博客】480p 老番 → 8K 壁纸:APISR × SUPIR × CCSR「多重高清放大」完全指南
  • YoloV9改进策略:Block改进-DCAFE,并行双坐标注意力机制,增强长程依赖与抗噪性-即插即用
  • 【Golang】:函数和包
  • HTTPS 配置与动态 Web 内容部署指南
  • 数组实现各类数据结构