当前位置: 首页 > 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.dtcms.com/a/336575.html

相关文章:

  • ACCESS/SQL SERVER保存软件版本号为整数类型,转成字符串
  • 第13章《远程处理:一对一及一对多》——PowerShell Remoting 学习笔记
  • Windows_Server软件定义网络架构
  • MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型
  • 编程算法实例-阶乘
  • 天地图开发的优点
  • Steam 上传游戏包体操作步骤
  • Win11 文件资源管理器预览窗格显示 XAML 文件内容教程
  • K8S集群环境搭建(一)
  • STL 容器
  • 华东师范上海AiLab商汤!NaviMaster:学习适用于GUI和具身导航任务的统一策略
  • React学习(四)
  • 计算机视觉(一):nvidia与cuda介绍
  • 王树森深度强化学习DRL(一)RL基本概念+价值学习
  • 基于51单片机汽车自动照明灯超声波光敏远近光灯设计
  • Git安装使用
  • 【软考中级网络工程师】知识点之网络存储
  • 如何巧妙通过面试提高业务经验?
  • Spring IoC DI 终极指南:从造车模型到企业级开发实战
  • 嵌入式开发入门—电子元器件~半导体
  • Linux中iSCSI存储配置与管理指南
  • Java的网络攻防仿真演练系统
  • 深度学习·GFSS
  • C语言字符串操作汇总
  • 线程相关知识
  • NokoPrint:安卓平台上的便捷无线打印解决方案
  • 存储引擎 InnoDB
  • 【Python】Python 面向对象编程详解​
  • k8s-单主机Master集群部署+单个pod部署lnmp论坛服务(小白的“升级打怪”成长之路)
  • 集成电路学习:什么是SIFT尺度不变特征变换