题目描述(难度中等)

给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。

字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。

说明:

字母异位词指字母相同,但排列不同的字符串。

不考虑答案输出的顺序。

示例 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" 的字母异位词。

解题思路

利用滑动窗口:

  • 窗口的长度是p的长度
  • 用两个哈希数组存储p的字母情况和滑动窗口的字母情况。如果二者相同,则将起始位置加入到结果中,如果不同,则将滑动窗口右移一位继续判断。
滑动窗口,本题中下面应为p

代码如下

class Solution {public:vector<int> findAnagrams(string s, string p) {vector<int> res;if(s.size()<p.size())//边界情况return res;int pn=p.size();vector<int> hash_p(256,0);//两个哈希数组存储p和滑动窗口的字母vector<int> hash_temp(256,0);for(auto c:p)//将p的字母存储起来hash_p[c]++;int left=0;//滑动窗口的左指针for(int i=0;i<s.size();i++){if(i<pn)//第一个滑动窗口{hash_temp[s[i]]++;//如果s的前p.size()字母正好是p的字母异位词,将起始位置0加入结果if(i==pn-1 && hash_p==hash_temp)res.push_back(0);   }else{int k=i-pn;hash_temp[s[k]]--;//减去移动窗口后的前一个位置的字母hash_temp[s[i]]++;//加上窗口右移后新加入的字母left++;//窗口起始位置+1//如果是异位词,则将起始位置加入结果if(hash_temp==hash_p)res.push_back(left);}}return res;}
};

提交结果:

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

  1. LeetCode||有效的字母异位词(排列)--给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词

    原题链接:https://leetcode-cn.com/problems/valid-anagram 题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示 ...

  2. cmake字符串转数组_掌握常用的数据结构之数组和字符串

    点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 数组和字符串 所谓数组,是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...

  3. LeetCode242/567.字符串的排列:有效的字母异位词(Kotlin语言)

    LeetCode242.有效的字母异位词 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram" ...

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

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

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

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

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

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

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

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

  8. LeetCode-438. 找到字符串中所有字母异位词

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

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

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

最新文章

  1. 不妨对苹果保持一点宽容
  2. android的文本框内容居中显示图片,DIV+CSS中让布局居中_背景图片居中_文字内容居中...
  3. 计算机专业考研英语二国家线,历年考研英语国家线汇总(2009-2020)
  4. Python 03 学习内容整理
  5. amd 深度学习模型部署_Web服务部署深度学习模型-续集
  6. wps数据匹配怎么做_【VK技术分享】数据安全怎么做—静态数据的识别和治理
  7. 云顶之弈机器人法爆_LOL云顶之弈机器人出装怎么选
  8. 文章id 文章标题点击量php,zblogphp函数:GetPost 获取指定ID/标题/别名的文章或页面数据...
  9. 怎么用python打开csv文件_使用Python从CSV文件读取数据
  10. python爬虫需要调用什么模块_适合新手练习的Python项目有哪些?Python爬虫用什么框架比较好?...
  11. 莫兰迪紫rgb_莫兰迪rgb参数_译述北京 | RGB的前世今生
  12. 英特尔科技论坛 北京登场
  13. 免费wechat机器人教程
  14. Python可视化打包神器,绝了!
  15. 利用python进行数据分析(第二版)_第十三章
  16. 微信小程序如何获取用户绑定手机号
  17. mysql移植海思_live555 交叉编译移植到海思开发板
  18. eclipse java 测试_测试:LR中使用Eclipse来进行Java程序的测试方法
  19. 神州网信版windows10可以上网,但是网络显示无法连接到Internet
  20. Win7上.bat文件打开方式变成了文本文档,怎么修改和恢复

热门文章

  1. 系统调用与软件中断SWI的实现
  2. STM32F103 IAP编程调试记录
  3. 区块链BaaS云服务(16)天德链TDBC“金丝猴链”
  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符
  5. java结丹期(13)----javaweb(responserequestservletcontext)
  6. 2019 ACM-icpc西安邀请赛总结(无题解)
  7. 解决:fatal: Not a valid object name: ‘master‘问题
  8. 思想解读:TF-A(ATF)中栈指针和栈内存的设计思想解读
  9. linux kernel的spinlock代码导读和分析
  10. (58)模拟线程切换——添加挂起、恢复线程功能