【力扣】438.找到字符串中所有字母异位词

ops/2025/2/3 13:32:20/

AC截图

题目

思路

我一开始是打算将窗口内的s子字符串和p字符串都重新排序,然后判断是否相等,再之后进行窗口滑动。不过缺点是会超时。

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> vec;if(s.size()<p.size()){return vec;}int len=p.size();sort(p.begin(),p.end());for(int i=0;i<=s.size()-len;i++){string ss = s.substr(i,len);sort(ss.begin(),ss.end());if(p==ss){vec.push_back(i);}}return vec;}
};

后面改用滑动窗口,

因为字符串 p 的异位词的长度一定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造一个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。

关键部分在此:

    //开始让窗口进行滑动for(int i=0;i<sLen-pLen;i++){ //i是滑动前的首位--scount[s.charAt(i) -'a'];       //将滑动前首位的词频删去++scount[s.charAt(i+pLen) -'a'];  //增加滑动后最后一位的词频(以此达到滑动的效果)//判断滑动后处,是否有异位词if(scount==pcount){vec.push_back(i+1);} }

代码

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> vec;if(s.size()<p.size()){return vec;}int plen=p.size();int slen=s.size();vector<int> scount(26);vector<int> pcount(26);for(int i=0;i<plen;i++){pcount[p[i]-'a']++;scount[s[i]-'a']++;}if(scount==pcount){vec.push_back(0);}for(int i=0;i<slen-plen;i++){scount[s[i]-'a']--;scount[s[i+plen]-'a']++;if(scount==pcount){vec.push_back(i+1);}}return vec;}
};


http://www.ppmy.cn/ops/155324.html

相关文章

怎么样把pdf转成图片模式(不能复制文字)

贵但好用的wps&#xff0c; 转换——转为图片型pdf —————————————————————————————————————————— 转换前&#xff1a; 转换后&#xff1a; 肉眼可见&#xff0c;模糊了&#xff0c;且不能复制。 其他免费办法&#xff0c;参考&…

代码练习2.3

终端输入10个学生成绩&#xff0c;使用冒泡排序对学生成绩从低到高排序 #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n-1; i) {for (int j 0; j < n-i-1; j) {if (arr[j] > arr[j1]) {// 交换 arr[j] 和 arr[j1]int temp arr[…

pycharm光标变成白格子 黑格子

PyCharm在输入时的小问题&#xff1a; 在使用PyCharm编译器写代码时&#xff0c;经常会遇到输入光标变成黑白格&#xff0c;在输入时会占一格&#xff0c;如图&#xff1a; 解决方法&#xff1a; 你可以重启pycharm 或 按键盘上的 INS&#xff08;insert&#xff09;键&…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

DeepSeek 使用的核心技术预测

最近DeepSeek 这个词算是火遍了整个AI圈&#xff0c;这个影响力迅速超过ChatGPT 的产品&#xff0c;都会使用哪些技术来做支撑呢。我这里简单做了一下梳理&#xff0c;结果不一定会完全准确&#xff0c;但是对这类产品的技术架构有个大概的认识。 以下是我对可能涉及的技术架构…

解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩

解锁豆瓣高清海报(二): 使用 OpenCV 拼接和压缩 脚本地址: 项目地址: Gazer PixelWeaver.py pixel_squeezer_cv2.py 前瞻 继上一篇“解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路”成功爬取豆瓣电影海报之后&#xff0c;本文将介绍如何使用 OpenCV 对这些海报进行智…

《Origin画百图》之脊线图

1.数据准备&#xff1a;将数据设置为y 2.选择绘图>统计图>脊线图 3.生成基础图形&#xff0c;并不好看&#xff0c;接下来对图形属性进行设置 4.双击图形>选择图案>颜色选择按点>Y值 5.这里发现颜色有色阶&#xff0c;过度并不平滑&#xff0c;需要对色阶进行更…

《苍穹外卖》项目学习记录-Day7导入地址簿模块功能代码

一个用户可以有多个收货地址&#xff0c;但是只能有一个默认地址&#xff0c;这个默认地址的作用就是当用户下单的时候默认使用这个地址。用户也可以点击新增收货地址&#xff0c;在弹出来的页面可以填写一个新的地址&#xff0c;填写完后点击保存地址向数据库插入一条新增地址…