当前位置: 首页 > article >正文

Leetcode热题100-438 找出字符串中所有字母异位数

Leetcode热题100-438 找出字符串中所有字母异位数

  • 1. 题目描述
  • 2. 解题思路
  • 3. 代码实现

1. 题目描述

438 找出字符串中所有字母异位数

2. 解题思路

该题所用到的算法为定长字符串滑动窗口, 其中窗口的大小为字符串p的长度:

  1. 定义两个无序哈希表window、need,其中window表示当前窗口内的元素,need表示需要匹配的字符串;
  2. 从左到右依次遍历字符串s,依次将当前字符加入window中,当当前窗口大小恰好等于字符串p的长度时,判断window与need是否一致,若一致则left放入结果res中;
  3. 当前窗口左边界右移,并将s[left]移出当前窗口;
  4. 按照2、3步骤依次遍历字符串s。

3. 代码实现

class Solution {
public:
    // 定长滑动窗口,窗口的大小为字符串p的长度
    vector<int> findAnagrams(string s, string p) {
        // 用以保存最终结果
        vector<int> res;
        unordered_map<char, int> need, window;
        for (auto ch : p) {
            need[ch]++;
        }
        int left = 0, right = 0;

        while (right < s.size()) {
            char c = s[right++];
            if (need.count(c)) {
                window[c]++;
            }
            // 恰好等于窗口的大小时,判断该窗口是否合理
            if (right - left == p.size()) {
                if (window == need) {
                    res.push_back(left);
                }
                char d = s[left++];
                if (need.count(d)) {
                    window[d]--;
                }
            }
        }
        return res;
    }
};

http://www.kler.cn/a/326137.html

相关文章:

  • Ceph PG(归置组)的状态说明
  • 每日一博 - Java的Shallow Copy和Deep Copy
  • 数据分析-Excel基础操作
  • 通过地址获取LONG和LAT并且存入csv
  • FreeSWITCH chat 得到的是 Error! Message Not Sent
  • Spring中的Bean
  • R语言非参数回归预测摩托车事故、收入数据:局部回归、核回归、LOESS可视化...
  • 408算法题leetcode--第19天
  • java通过webhook给飞书发送群消息
  • PTA L1-080 乘法口诀数列
  • C语言线程编程深度解析
  • Elasticsearch UNASSIGNED 怎么修复
  • OJ在线评测系统 后端 用策略模式优化判题机架构
  • MySQL基础篇 - 约束
  • Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法
  • Altium Designer脚本的执行方式
  • 【漏洞复现】VEXUS多语言货币交易所存在未授权访问漏洞
  • centos已安装python3.7环境,还行单独安装python3.10环境,如何安装,具体步骤
  • 进程、线程、协程详解:并发编程的三大武器
  • websocket初识
  • 数据集-目标检测系列-兔子检测数据集 rabbit >> DataBall
  • 中国资产“超级星期四”之后,腰部中概股或成增长“黑马”
  • Linux云计算 |【第四阶段】PROJECT2-DAY1
  • 如何使用开发者工具捕获鼠标右键点击事件
  • Tensorflow2.0
  • Spring Boot 进阶-深入了解SpringBoot条件注解