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

千问 LeetCode 2781. 最长合法子字符串的长度 Java实现

这道题是 LeetCode 第 2781 题“最长合法子字符串的长度”属于一道经典的双指针滑动窗口问题。题目解析给定一个字符串 word 和一个禁用字符串数组 forbidden要求找出 word 中最长的子字符串且该子字符串不包含 forbidden 中的任何一个字符串。核心思路双指针滑动窗口 逆向枚举1. 双指针维护合法区间使用 left 和 right 两个指针维护一个合法的滑动窗口right 不断向右扩展left 在遇到非法情况时向右收缩。2. 利用题目约束进行优化题目中有一个非常关键的提示——forbidden[i] 的长度不超过 10。这意味着当我们把 right 指针向右移动一位时新产生的非法子串如果存在一定是以当前 right 为结尾且长度在 1 到 10 之间的某个子串。3. 逆向检查与更新左边界每当 right 移动后我们只需要从 right 开始倒着往前最多枚举 10 个字符即检查 word.substring(i, right 1) 是否在禁用列表中。如果发现某个子串在 forbidden 中说明当前的 left 必须收缩到这个非法子串的右边即 left i 1从而保证窗口 [left, right] 始终是合法的。Java 代码实现import java.util.HashSet;import java.util.List;import java.util.Set;class Solution {public int longestValidSubstring(String word, ListString forbidden) {// 将 forbidden 数组存入 HashSet实现 O(1) 时间复杂度的查找SetString set new HashSet(forbidden);int n word.length();int ans 0;int left 0;// right 指针不断向右扩展for (int right 0; right n; right) {// 从当前 right 位置开始倒着往前最多检查 10 个字符// 因为 forbidden 中最长的字符串长度只有 10for (int i right; i left i right - 10; i--) {// 截取子串 word[i...right]String sub word.substring(i, right 1);if (set.contains(sub)) {// 如果发现了非法子串左指针必须收缩到该非法子串的右侧left i 1;// 找到一个非法的就可以停止了因为我们要找的是最靠左的冲突点来更新 leftbreak;}}// 更新最长合法子字符串的长度ans Math.max(ans, right - left 1);}return ans;}}复杂度分析* 时间复杂度O(N)。虽然代码中有一个嵌套的 for 循环但由于 forbidden 字符串的最大长度限制为 10内层循环最多只会执行 10 次常数级别。因此整体时间复杂度取决于外层 right 指针的遍历即 O(N)其中 N 是 word 的长度。* 空间复杂度O(M)。我们需要一个哈希集合来存储 forbidden 数组中的字符串其中 M 是 forbidden 数组中所有字符串的总长度。这种方法巧妙地利用了数据范围的限制将原本可能需要复杂字符串匹配如 AC自动机/Trie图的问题简化为了非常直观且高效的双指针滑动窗口问题。
http://www.rkmt.cn/news/1410347.html

相关文章:

  • ESP8266项目避坑指南:温湿度传感器DHT11、水位传感器、L298N电机驱动模块的电源管理与共地问题详解
  • 2026年比较好的外墙乳胶漆/防霉乳胶漆推荐品牌厂家 - 行业平台推荐
  • Baichuan2-13B-Base部署教程:NPU环境下高效运行大模型的终极指南
  • AI如何量化评估医疗技能:从多模态感知到临床决策推理
  • 基于LangChain与RAG技术构建智能PDF问答系统
  • 目标检测论文总结
  • 【计算机网络】UDP协议
  • OpenAI Privacy Filter实战教程:Transformers与Transformers.js双框架调用指南
  • FModel终极指南:5分钟掌握虚幻引擎游戏资源提取的完整流程
  • FiberPO优化框架揭秘:JoyAI-LLM-Flash-INT4如何提升复杂任务稳定性?
  • 别再手动轮询了!用Nginx给本地Nacos集群做个‘管家’(RuoYi-Cloud-Plus实战)
  • 从半加器到前缀加法器:用Verilog HDL手把手教你搭建一个32位CPU加法单元(附完整代码)
  • 2026年评价高的理瓶机二手饮料设备/梁山包膜机二手饮料设备口碑好的厂家推荐 - 行业平台推荐
  • 关于“778之问”与“X54之答”的文明范式校验报告
  • 从点亮到炫酷UI:手把手教你用ST7789 TFT屏在STM32上显示中文和图片(含取模教程)
  • 告别顿挫感:Simulink仿真揭秘AMT换挡平顺性的三大关键(油门、离合器、模糊规则协同)
  • Python 爬虫实战:小红书笔记数据爬取与内容分析
  • 做了15年杯子,还是这家实在!山东杯精灵,双层玻璃杯源头工厂,定制玻璃杯厂家匠心制造,批发价格不掺水分值得推荐 - 栗子测评
  • 如何永久保存微信聊天记录:WeChatMsg完整指南与智能分析工具
  • 写毕业论文用哪个AI?2026年精选6款写论文的AI软件测评,为你打造高质量论文
  • CPU本地高效运行大语言模型:GGUF格式与llama.cpp实战指南
  • 如何永久保存微信聊天记录:三步实现数据自主掌控的完整指南
  • 2026年口碑好的大功率高压清洗机/汽油高压清洗机厂家推荐与选型指南 - 品牌宣传支持者
  • 从通用AI到定制化LLM系统:架构解析与工程实践指南
  • 2026年靠谱的均质机饮料设备回收/杀菌机饮料设备回收/灌装机饮料设备回收/梁山贴标机饮料设备回收厂家选择推荐 - 品牌宣传支持者
  • 如何用Zotero Style插件实现文献阅读进度可视化与智能管理:终极指南
  • Vue3版JeecgBoot项目实战:5分钟搞定前台官网的免登录访问(附完整路由与白名单配置)
  • 2026年靠谱的理瓶机二手饮料设备/二手饮料设备储罐优质公司推荐 - 品牌宣传支持者
  • 数字记忆守护者:用WeChatMsg将微信对话转化为永恒数字资产
  • AiVIS:视觉智能解析引擎,让AI精准读懂网页内容