mfc 找到字符串中字符_利用滑动窗口解LeetCode438题:找到字符串中所有字母异位词...
题目描述(难度中等)
给定一个字符串 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的字母情况和滑动窗口的字母情况。如果二者相同,则将起始位置加入到结果中,如果不同,则将滑动窗口右移一位继续判断。
代码如下
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题:找到字符串中所有字母异位词...相关推荐
- LeetCode||有效的字母异位词(排列)--给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词
原题链接:https://leetcode-cn.com/problems/valid-anagram 题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示 ...
- cmake字符串转数组_掌握常用的数据结构之数组和字符串
点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 数组和字符串 所谓数组,是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...
- LeetCode242/567.字符串的排列:有效的字母异位词(Kotlin语言)
LeetCode242.有效的字母异位词 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram" ...
- LeetCode 438. 找到字符串中所有字母异位词(滑动窗口)
1. 题目 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100 ...
- 【LeetCode】【HOT】438. 找到字符串中所有字母异位词(滑动窗口)
[LeetCode][HOT]438. 找到字符串中所有字母异位词 文章目录 [LeetCode][HOT]438. 找到字符串中所有字母异位词 package hot;import java.uti ...
- LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)
题目描述 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. ...
- iOS LeetCode ☞ 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成的字符串(包括相同的字符串). 示例 1: 输入: ...
- LeetCode-438. 找到字符串中所有字母异位词
题目描述: 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100 ...
- 438. 找到字符串中所有字母异位词【异位词-哈希数组】
438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成的字符串(包括 ...
最新文章
- 不妨对苹果保持一点宽容
- android的文本框内容居中显示图片,DIV+CSS中让布局居中_背景图片居中_文字内容居中...
- 计算机专业考研英语二国家线,历年考研英语国家线汇总(2009-2020)
- Python 03 学习内容整理
- amd 深度学习模型部署_Web服务部署深度学习模型-续集
- wps数据匹配怎么做_【VK技术分享】数据安全怎么做—静态数据的识别和治理
- 云顶之弈机器人法爆_LOL云顶之弈机器人出装怎么选
- 文章id 文章标题点击量php,zblogphp函数:GetPost 获取指定ID/标题/别名的文章或页面数据...
- 怎么用python打开csv文件_使用Python从CSV文件读取数据
- python爬虫需要调用什么模块_适合新手练习的Python项目有哪些?Python爬虫用什么框架比较好?...
- 莫兰迪紫rgb_莫兰迪rgb参数_译述北京 | RGB的前世今生
- 英特尔科技论坛 北京登场
- 免费wechat机器人教程
- Python可视化打包神器,绝了!
- 利用python进行数据分析(第二版)_第十三章
- 微信小程序如何获取用户绑定手机号
- mysql移植海思_live555 交叉编译移植到海思开发板
- eclipse java 测试_测试:LR中使用Eclipse来进行Java程序的测试方法
- 神州网信版windows10可以上网,但是网络显示无法连接到Internet
- Win7上.bat文件打开方式变成了文本文档,怎么修改和恢复
热门文章
- 系统调用与软件中断SWI的实现
- STM32F103 IAP编程调试记录
- 区块链BaaS云服务(16)天德链TDBC“金丝猴链”
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符
- java结丹期(13)----javaweb(responserequestservletcontext)
- 2019 ACM-icpc西安邀请赛总结(无题解)
- 解决:fatal: Not a valid object name: ‘master‘问题
- 思想解读:TF-A(ATF)中栈指针和栈内存的设计思想解读
- linux kernel的spinlock代码导读和分析
- (58)模拟线程切换——添加挂起、恢复线程功能