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

leetcode30.串联所有单词的子串

利用词频字典进行单词统计+滑动窗口解决

class Solution {public List<Integer> findSubstring(String s, String[] words) {//1.边界判断s长度是否大于words中所有字符长度List<Integer> result = new ArrayList<>();int wordCount = words.length;int wordLen = words[0].length();int sLen = s.length();if (sLen < words.length * wordLen) {return result;}//2.定义一个词频字典,存储单词以及对应出现的次数Map<String, Integer> wordFreq = new HashMap<>();for (String word : words) {wordFreq.put(word, wordFreq.getOrDefault(word, 0) + 1);}//3.按照不同的起始偏移量启动滑动窗口算法for (int i = 0; i < wordLen; i++) {//3.1定义滑动窗口中涵盖的单词数量以及滑动窗口中记录的词频int count = 0;Map<String, Integer> curFreq = new HashMap<>();//3.2滑动窗口算法实现for (int left = i, right = i; right + wordLen <= sLen; right += wordLen) {String curWord = s.substring(right, right + wordLen);//3.2.1当前单词在词频字典中,滑动窗口if (wordFreq.containsKey(curWord)) {curFreq.put(curWord, curFreq.getOrDefault(curWord, 0) + 1);count++;//3.2.1.1当前词频超过了词典中的词频就需要窗口左移,缩小窗口while (curFreq.get(curWord) > wordFreq.get(curWord)) {String leftWord = s.substring(left, left + wordLen);curFreq.put(leftWord, curFreq.get(leftWord) - 1);count--;left += wordLen;}//3.2.1.2当前窗口恰好涵盖了words中的所有单词,将当前窗口左边界加入结果集中,然后窗口左移if (count == wordCount) {result.add(left);String leftWord = s.substring(left, left + wordLen);curFreq.put(leftWord, curFreq.get(leftWord) - 1);count--;left += wordLen;}} else {//3.2.2当前单词不在次品字典中,直接清空一切curFreq.clear();count = 0;left = right + wordLen;}}}//4.返回结果return result;}
}

http://www.xdnf.cn/news/1476055.html

相关文章:

  • [数据结构] LinkedList
  • c++之基础B(x转10进制,含十六进制)(第四课)
  • 7.网络虚拟化
  • 【开题答辩全过程】以 基于Hadoop电商数据的可视化分析为例,包含答辩的问题和答案
  • Lua和C#比较
  • 分布式go项目-搭建监控和追踪方案补充-ELK日志收集
  • OpenHarmony之有源NFC-connected_nfc_tag模块详解
  • LangChain实战(十八):构建ReAct模式的网页内容摘要与分析Agent
  • 同一台nginx中配置多个前端项目的三种方式
  • 贪心算法在脑机接口解码问题中的应用
  • qiankun 微前端接入实战
  • 在线教育系统源码选型指南:功能、性能与扩展性的全面对比
  • import type在模块引入中的作用
  • 从“能说话”到“会做事”:AI工具如何重塑普通人的工作与生活?
  • 语义切片技术深度解析:重新定义RAG时代的文本处理范式
  • 分布式通信平台测试报告
  • 【Neovim】Vi、Vim、Neovim 与 LazyVim:发展史
  • 【开题答辩全过程】以 “爱心”家政管理系统为例,包含答辩的问题和答案
  • Linux/UNIX系统编程手册笔记:共享库、进程间通信、管道和FIFO、内存映射以及虚拟内存操作
  • 宝塔PostgreSQL安装pgvecto插件contrib包实现向量存储
  • 2025年渗透测试面试题总结-54(题目+回答)
  • rom定制系列------小米8“无人直播”虚拟摄像头 刷机固件 实现解析过程
  • `vector_ip_ops`(内积操作)和 `vector_cosine_ops`(余弦相似度操作)的不同
  • 详解 ELO 评分系统
  • [光学原理与应用-414]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 柱面镜:光学系统中的一维(焦线)调控专家(传统透镜是0维的点)
  • 《用 asyncio 构建异步任务队列:Python 并发编程的实战与思考》
  • java分布式场景怎么实现一个高效的 读-写锁
  • 友猫社区APP源码与小程序端部署详解
  • Redis数据库基础
  • MySQL中有哪些锁