LeetCode Hot Code——找到字符串中所有字母异位词

给定两个字符串 sp,找到 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

  • sp 仅包含小写字母

    class Solution {
    public:
    vector<int> findAnagrams(string s, string p)
    {
    vector<int> ans;
    if(s.size()<p.size())
    {
    return ans;
    }

    复制代码
      int hashs[26] = { 0 };
      int hashp[26] = { 0 };
      for (auto e : p)
      {
      	hashp[e - 'a']++;
      }
    
      int left = 0;
      int right = 0;
      int leg = 0;
      //初始化
      while (right < p.size())
      {
      	//进窗口
      	if (hashs[s[right] - 'a'] < hashp[s[right] - 'a'])
      	{
      		leg++;
      	}
      	hashs[s[right] - 'a']++;
      	right++;
      }
      while (right < s.size())
      {
      	if(leg == p.size())
      	{
      		ans.push_back(left);
      	}
      	//出窗口

    if (hashs[s[left] - 'a'] <= hashp[s[left] - 'a'])
    {
    leg--;
    }
    hashs[s[left] - 'a']--;

    left++;

    复制代码
      	//进窗口
      	
     
      	if (hashs[s[right] - 'a'] < hashp[s[right] - 'a'])
      	{
      		leg++;
      	}
      	hashs[s[right] - 'a']++;
          right++;
      }
      if(leg == p.size())
      	{
      		ans.push_back(left);
      	}
      return ans;

    }
    };

相关推荐
wuweijianlove3 小时前
算法性能的渐近与非渐近行为对比的技术4
算法
_dindong4 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
AI成长日志4 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
黎阳之光4 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
skywalker_114 小时前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
wfbcg5 小时前
每日算法练习:LeetCode 209. 长度最小的子数组 ✅
算法·leetcode·职场和发展
_日拱一卒5 小时前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾5 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
SatVision炼金士5 小时前
合成孔径雷达干涉测量(InSAR)沉降监测算法体系
算法