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

算法练习题25——leetcode3279统计重新排列后包含另一个字符串的子字符串的数目(滑动窗口 双指针 哈希)

题目描述

解题思路

本题用到了滑动窗口 双指针 哈希

刚开始我是没读懂题的因为我笨

我想把我的思路说一下 左端不轻易缩小 只有找到跟word2匹配了 比如说abbcdd  遍历到c的时候才能匹配这个word2 对吧 那么之后加上以一个d或者俩d 都符合了 然后我们算完了 才能缩小左端 扩大右端

让left先不动 等字符频次和目标频次完全匹配后 right右边剩余的所有字符都可以加到结果字符串中作为符合的子字符串 然后再移动left

代码示例

class Solution {public long validSubstringCount(String word1, String word2) {int n = word1.length();int m = word2.length();// 统计 word2 的字符频次Map<Character, Integer> countWord2 = new HashMap<>();for (char c : word2.toCharArray()) {countWord2.put(c, countWord2.getOrDefault(c, 0) + 1);}// 滑动窗口的字符频次计数器Map<Character, Integer> countWindow = new HashMap<>();int left = 0;  // 窗口左边界long result = 0;int matched = 0;  // 记录匹配的字符数量// 开始滑动窗口的遍历for (int right = 0; right < n; right++) {// 扩展右端,加入当前字符char rightChar = word1.charAt(right);countWindow.put(rightChar, countWindow.getOrDefault(rightChar, 0) + 1);// 如果该字符在 word2 中存在,且它的频次也匹配了if (countWord2.containsKey(rightChar)) {if (countWindow.get(rightChar).equals(countWord2.get(rightChar))) {matched++;}}// 当窗口中的字符频次与 word2 完全匹配时while (matched == countWord2.size()) {// 计算从当前窗口到字符串末尾的所有合法子串result += (n - right);  // 从 right 到字符串末尾的所有子串都是合法的// 缩小左端,移除左边的字符char leftChar = word1.charAt(left);if (countWindow.get(leftChar) > 0) {countWindow.put(leftChar, countWindow.get(leftChar) - 1);}if (countWord2.containsKey(leftChar)) {if (countWindow.get(leftChar) < countWord2.get(leftChar)) {matched--;  // 如果频次不再匹配,匹配字符数减少}}left++;  // 左端收缩}}return result;}
}
http://www.lryc.cn/news/444021.html

相关文章:

  • JavaEE: 深入探索TCP网络编程的奇妙世界(二)
  • GPT1-GPT3论文理解
  • C/C++内存管理 ——
  • 深度学习02-pytorch-04-张量的运算函数
  • OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【文件系统】上
  • NISP 一级 | 8.4 《网络安全法》
  • 实现人体模型可点击
  • C++ | Leetcode C++题解之第429题N叉树的层序遍历
  • Pandas简介
  • Python | Leetcode Python题解之第430题扁平化多级双向链表
  • 机器人机构、制造
  • 《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
  • 5.《DevOps》系列K8S部署CICD流水线之K8S通过Yaml部署GitLab
  • [SAP ABAP] 创建数据库视图和维护视图
  • 【最快最简单的排序 —— 桶排序算法】
  • AI时代,服务器厂商能否打破薄利的命运?
  • 2024年9月python二级易错题和难题大全(附详细解析)(二)
  • 4.结构型设计模式 - 第1回:引言与适配器模式 (Adapter Pattern) ——设计模式入门系列
  • 解决mybatis plus 中 FastjsonTypeHandler无法正确反序列化List类型的问题
  • MacOS安装homebrew,jEnv,多版本JDK
  • 【HTTP】认识 URL 和 URL encode
  • 【AI学习笔记】初学机器学习西瓜书概要记录(二)常用的机器学习方法篇
  • [SDX35+WCN6856]SDX35 + WCN6856 默认增加打包wifi配置hostapd_24g.conf和hostapd_5g.conf操作方法
  • 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数
  • 网络安全-LD_PRELOAD,请求劫持
  • GO入门之值传递于引用(指针、内存地址)传递扫盲
  • 【渗透测试】-vulnhub源码框架漏洞-Os-hackNos-1
  • sqli-lab靶场学习(三)——Less8-10(盲注、时间盲注)
  • Pybullet 安装过程
  • Error when custom data is added to Azure OpenAI Service Deployment