今天是坚持每日一题打卡的第二十七天


题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/


题解汇总:https://zhanglong.blog.csdn.net/article/details/121071779


题目描述

给定两个字符串 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 仅包含小写字母


滑动窗口 + 哈希表解法

以往滑动窗口是采用队列构建,但这次采用了哈希表构建

原因是:题意要求符合条件的子串,顺序可以不同,因此采用统计词频(个数)来判断相等的方法。

步骤:

  1. 构建滑动窗口
  2. 移动滑动窗口

注意:滑动窗口的边界值问题


class Solution {public:vector<int> findAnagrams(string s, string p) {int sLen = s.size(), pLen = p.size();if (sLen < pLen) return {};vector<int> sArr(26);vector<int> pArr(26);vector<int> res;for (int i = 0; i < p.size(); i++) {++sArr[s[i]-'a'];++pArr[p[i]-'a'];}if (sArr == pArr) res.push_back(0);for (int i = 0; i < sLen - pLen; i++) {// 窗口右移sArr[s[i]-'a']--;sArr[s[i+pLen]-'a']++;if (sArr == pArr) res.push_back(i + 1);}return res;}
};

【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. leetcode 438. Find All Anagrams in a String | 438. 找到字符串中所有字母异位词(Java)

    题目 https://leetcode.com/problems/find-all-anagrams-in-a-string/ 题解 方法1:尝试构造一种"与顺序无关的哈希" 思考 ...

  9. LeetCode:438. 找到字符串中所有字母异位词(简单易懂)

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

最新文章

  1. 标题1100: 简略计算器
  2. C#使用HTTP头检测网络资源是否有效
  3. 外国人最常说的100个“中国词”出炉,第一个你绝对想不到…
  4. linux 系统 可视化工具实时监控_Linux上的实时监控平台-你需要这样做
  5. 在html页面中怎么打印区域,javascript打印web页面中指定区域的方法
  6. CSS基础——盒子模型【学习笔记】
  7. zedboard的xdc文件
  8. 计算机考研机试指南(九)——搜索(百鸡问题、ABC、胜利大逃亡、迷宫问题、C翻转、旋转矩阵、字符串匹配、)...
  9. swagger2常用注解
  10. 南阳oj-----一种排序(set)
  11. 递归算法经典实例python-python实现十大经典算法
  12. python django 下载多个文件,接收多个文件
  13. FusionChartsFree调用json数据的简单例子
  14. 3dmax渲染计算机内存不足怎么办,解决3dmax渲染内存不够导致渲染失败的三种方法...
  15. Elasticsearch5.2.1集群搭建,动态加入节点,并添加监控诊断插件
  16. 项目经理面试的一些问题讨论
  17. Vim,人类史上最好用的文本编辑器!从此以后你就是一个善良的极客!
  18. Matlab App Designer自学笔记(三):利息计算器案例
  19. python chr黑方格_Python中的chr()
  20. X-FRAME-OPTIONS 出现两个或多个的原因

热门文章

  1. VC程序初始化隐藏窗体
  2. python中的线程threading.Thread()使用
  3. 字符串匹配--Sunday算法
  4. SpringMVC中@ResponseBody的相关注意点
  5. 争做RTC领域标杆——与华为云副总裁薛浩聊聊我们的视频时代
  6. 和Google 微帧 Hulu Hotstar 爱奇艺 火花思维 猿辅导 新浪微博的专家聊聊Codec
  7. Google Duo采用WaveNetEQ填补语音间隙
  8. 做音视频开发,你读对书了吗?(内有福利)
  9. 交付效率提升40%,珍爱网基于微服务的DevOps落地指南
  10. 做WebRTC,千万别把媒体和信令混在一起