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

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

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

滑动窗口解法

  • 创建两个Map 一个记录实际需要的有效字符 另一个记录窗口内的有效字符个数
  • 初始化need
  • 每次遍历一个字符 判断是不是有效字符 如果是 更新window 另外判断window中有效字符的个数是不是等于need中有效字符的个数 如果是更新valid
  • 当窗口长度过大 需要缩小边界 判断左边窗口的字符 如果是有效字符 更新window和valid
class Solution {public List<Integer> findAnagrams(String s, String p) {Map<Character,Integer> need = new HashMap<>();// 记录P中每一个字符Map<Character,Integer> window = new HashMap<>();// 记录窗口内部的所有有效字符// 初始化for(int i  = 0; i < p.length(); i++){char c = p.charAt(i);need.put(c,need.getOrDefault(c,0) + 1);}int left = 0;int right = 0;int valid = 0;// 记录窗口内有效字符是否已经达到要求List<Integer> res = new ArrayList<>();while(right < s.length()){char c = s.charAt(right);right++;// 进行窗口内数据的一系列更新// 计算当前有效字符的满足个数if(need.containsKey(c)){window.put(c,window.getOrDefault(c,0) + 1);// 记录有效字符// 判断窗口内的有效字符和 need中的有效字符个数是不是相等  因为很可能不相等// 如果是 直接valid++ 代表有一个字符的个数已经满足了if(window.get(c).equals(need.get(c))){valid++;}}// 判断左边的窗口是不是要收缩while(right - left >= p.length()){if(valid == need.size()){// 说明找到一个字母异位词  记录一下起始边界res.add(left);}// 取出左边窗口边界的字符  进行更新操作  更新validchar d = s.charAt(left);// 窗口缩小left++;// 进行窗口内数据的一系列更新if(need.containsKey(d)){// 将窗口内满足条件的有效字符减一 if(window.get(d).equals(need.get(d))){valid--;}window.put(d,window.get(d) - 1);// 重新写入window窗口}}}return res;}}
http://www.lryc.cn/news/168442.html

相关文章:

  • 【PowerQuery】Excel 一分钟以内刷新PowerQuery数据
  • 【C语言】用冒泡排序实现my_qsort
  • 【css】深入理解flex属性
  • 前端项目开发流程
  • MybatisPlus逆向工程入门指南:让你的开发更高效、更简洁、更优雅
  • 通用商城项目(下)
  • k8s集群使用ingress转发grafana服务
  • MongoDB的备份和恢复
  • Pytorch学习笔记(GPU训练)
  • 一款开源的shell脚本分析工具
  • HTML <video> 标签
  • mac 本地运行 http-proxy-middleware ,请求超时
  • 【Effective Python】读书笔记-05类与接口
  • 【办公自动化】用Python在Excel中查找并替换数据(文末送书)
  • python学习随笔3
  • 《TCP/IP网络编程》阅读笔记--epoll的使用
  • Python 递归函数
  • Java实现计算两个日期之间的工作日天数
  • CS5817规格书|CS5817芯片参数|多功能便携式显示器方案芯片规格
  • 2023面试知识点一
  • 【算法题】2856. 删除数对后的最小数组长度
  • Java面向对象编程
  • K8S:Yaml文件详解及编写示例
  • 去耦电路设计应用指南(一)MCU去耦设计介绍
  • 【c++】杂记
  • 简记:使用 Django Shell 清空 数据库表
  • Web项目测试
  • Springboot 集成 Ehcache 提示 Cannot find cache named ‘employee_all‘ for Builder
  • pandas 笔记:shift
  • 解密(2023寒假每日一题 20)