前言

我是很少刷算法题的,今天在刷leetcode的时候第一次遇到了叫做滑动窗口的思想,觉得很有意思分享给大家。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目要求和示例?

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

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
 示例 2:

输入: s = "abab", p = "ab"
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。

提示:

1 <= s.length, p.length <= 3 * 104
s 和 p 仅包含小写字母

二、代码

(官方题解,补充了一些注释)

class Solution {
public:vector<int> findAnagrams(string s, string p) {int sLen = s.size(), pLen = p.size();//s是目标串,p是匹配串if (sLen < pLen) {//当目标串短于匹配串时无法比较return vector<int>();}vector<int> ans;vector<int> sCount(26);//定义一个26位的数组存储26个字母的个数,0~25分别对应a~zvector<int> pCount(26);for (int i = 0; i < pLen; ++i) {//进行s中前p个字符串进行比较,各个字符相同则返回0(第一个异位词的起始索引)++sCount[s[i] - 'a'];++pCount[p[i] - 'a'];}if (sCount == pCount) {ans.emplace_back(0);//相当于vector中的push_back,但效率更高}/*p在s上滑动,在sCount中需要变动的仅仅是减去i位置对应的字符数(目前匹配当中的第一个字符)加上即将滑入的第i+p个字符对应的数*/for (int i = 0; i < sLen - pLen; ++i) {--sCount[s[i] - 'a'];++sCount[s[i + pLen] - 'a'];if (sCount == pCount) {ans.emplace_back(i + 1);}}return ans;}
};

总结

1:学习到了新的解决这类问题的方法(滑动窗口)
2:leetcode官方题解地址:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/solution/zhao-dao-zi-fu-chuan-zhong-suo-you-zi-mu-xzin/3:push_back和emplace_back:

https://blog.csdn.net/qq295109601/article/details/114731079?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164925792716780261952480%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164925792716780261952480&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-114731079.142^v5^pc_search_result_control_group,157^v4^control&utm_term=emplace_back&spm=1018.2226.3001.4187

力扣438题找到字符串中所有字母异位词相关推荐

  1. 438. 找到字符串中所有字母异位词【我亦无他唯手熟尔】

    438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 题解 官方 438. 找到字符串中所有字母异位词 难度 中等 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 ...

  2. 【LeetCode】【HOT】438. 找到字符串中所有字母异位词(滑动窗口)

    [LeetCode][HOT]438. 找到字符串中所有字母异位词 文章目录 [LeetCode][HOT]438. 找到字符串中所有字母异位词 package hot;import java.uti ...

  3. 438. 找到字符串中所有字母异位词【异位词-哈希数组】

    438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成的字符串(包括 ...

  4. Java实现 LeetCode 438 找到字符串中所有字母异位词

    438. 找到字符串中所有字母异位词 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p ...

  5. iOS LeetCode ☞ 找到字符串中所有字母异位词

    给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成的字符串(包括相同的字符串). 示例 1: 输入: ...

  6. leetcode刷题(91)——438. 找到字符串中所有字母异位词

    给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. 说明: ...

  7. LeetCode 438. 找到字符串中所有字母异位词(滑动窗口)

    1. 题目 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100 ...

  8. mfc 找到字符串中字符_利用滑动窗口解LeetCode438题:找到字符串中所有字母异位词...

    题目描述(难度中等) 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 ...

  9. LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)

    题目描述 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. ...

  10. 找到字符串中所有字母异位词—leetcode438

    给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. 说明: ...

最新文章

  1. TimeQuest约束外设之诡异的Create Generated Clocks用法
  2. (转)Vix_API 操作 VMware
  3. Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...
  4. HDU 1175 连连看
  5. invalid signature_php,微信开发JSSDK遇到的问题 config:invalid signature
  6. unity 半透明混合问题_Unity 实时 半透明 阴影 shader
  7. https 密钥 php,https加密方式是什么
  8. 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...
  9. django-配置模板的路径-0223
  10. Matlab Tricks(二十八)—— 笛卡尔积的实现
  11. cms完整视频教程+源码 孔浩老师 全131讲
  12. GifUtil给gif图片添加文字、图片水印
  13. 概率论的学习和整理11:伯努利试验的3种分布:0-1分支,几何分布, 二项分布
  14. zblock 结构_结构方块 - Minecraft Wiki,最详细的官方我的世界百科
  15. 2022 Google I/O 谷歌开发者大会汇总
  16. 蛋白质二级结构预测-Chou-Fasman预测方法
  17. Android 动画之一 Drawable Animation —— 逐帧(Frame)动画
  18. 用Python做雷霆战机小游戏【附素材+源码】
  19. Linux下打开chm文件
  20. 【Audio】Unity音频模块:加载、转换、剪切、混音、合并

热门文章

  1. BlackBerry Internet Service故障:公司内部同事无法互通邮件,对外联络没有问题
  2. Java_多线程_模拟电影院售票
  3. [概率练习] n个小球放入m个盒子(8大类)
  4. 为什么会有这么多种Python?
  5. 性别单选框jsp_jsp获取单选按钮的值源码实例
  6. 【雅思大作文考官范文】——第八篇:recycling essay(垃圾回收)
  7. U盘启动的WinPe安装winxp(非ghost版)重启后出现NTLDR IS MISSING的问题
  8. java怎么读取docx文件_java – 如何显示或读取docx文件
  9. Cloudera Manager 安装
  10. [golang] 导入 go-sqlite3 报错解决方法