438. 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
示例 1:
输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
> 思路
***采用滑动窗口的做法
> 代码
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
int len1 = s.size();
int len2 = p.size();
if(len1 < len2) return {};
unordered_map<char,int> mp_s;
unordered_map<char,int> mp_p;
for(const auto &c:p){
mp_p[c]++;
}
int l = 0;int r = 0;int valid = 0;
vector<int> res;
while(r < len1){
//扩大窗口
if(mp_p.count(s[r])){
mp_s[s[r]]++;
if(mp_p[s[r]] == mp_s[s[r]]){
valid++;
}
}
//满足条件 缩小窗口
while(r - l + 1 >= len2){
if(valid == mp_p.size()){
res.push_back(l);
}
if(mp_p.count(s[l])){
if(mp_p[s[l]] == mp_s[s[l]]){
valid--;
}
mp_s[s[l]]--;
}
l++;
}
r++;
}
return res;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具