JAVA练习374- 找出字符串中第一个匹配项的下标
题目概览给你两个字符串haystack和needle请你在haystack字符串中找出needle字符串的第一个匹配项的下标下标从 0 开始。如果needle不是haystack的一部分则返回-1。示例 1输入haystack sadbutsad, needle sad 输出0 解释sad 在下标 0 和 6 处匹配。 第一个匹配项的下标是 0 所以返回 0 。示例 2输入haystack leetcode, needle leeto 输出-1 解释leeto 没有在 leetcode 中出现所以返回 -1 。提示1 haystack.length, needle.length 10^4haystack和needle仅由小写英文字符组成来源28. 找出字符串中第一个匹配项的下标 - 力扣LeetCode解题分析方法一暴力求解算法思路暴力匹配Brute Force是最直观的字符串匹配方法。从 haystack 的每个位置开始逐个字符与 needle 进行比较如果完全匹配则返回当前位置如果不匹配则从 haystack 的下一个位置重新开始比较。实现步骤遍历 haystack 的每个可能起始位置 i从 0 到 m-n对于每个起始位置 i比较 haystack[i...in-1] 与 needle[0...n-1] 的每个字符如果所有字符都匹配返回当前起始位置 i如果中途发现不匹配则从下一个起始位置 i1 重新开始比较如果遍历完所有可能起始位置都没有找到匹配返回 -1代码解析class Solution { public int strStr(String haystack, String needle) { int m haystack.length(), n needle.length(); int i 0, j 0; // 双指针遍历i 指向 haystackj 指向 needle while(i m j n) { if (haystack.charAt(i) needle.charAt(j)) { // 当前字符匹配 if (j n - 1) { // 如果 needle 的所有字符都已匹配返回起始位置 return i - j; } i; j; } else { // 当前字符不匹配回溯到下一个起始位置 i i - j 1; // i 回溯到下一个起始位置 j 0; // j 重置为 0重新开始匹配 } } return -1; // 遍历结束未找到匹配 } }时间复杂度O(m×n)其中 m 是 haystack 长度n 是 needle 长度。最坏情况下需要比较 m×n 次。空间复杂度O(1)只使用了常数级别的额外空间。优点实现简单易于理解不需要预处理。缺点效率较低当字符串较长时性能较差。方法二KMP算法思路KMPKnuth-Morris-Pratt算法通过预处理模式串needle构建 next 数组部分匹配表在匹配失败时利用已匹配的信息跳过不必要的比较避免回溯主串指针。核心概念前缀字符串的前缀是指从第一个字符开始但不包含最后一个字符的所有子串后缀字符串的后缀是指从最后一个字符结束但不包含第一个字符的所有子串最长公共前后缀长度对于模式串的每个位置计算该位置之前子串的最长相等前后缀的长度next 数组存储每个位置的最长公共前后缀长度用于匹配失败时确定模式串的移动位置实现步骤构建 next 数组预处理模式串计算每个位置的最长公共前后缀长度匹配过程使用双指针 i主串指针和 j模式串指针进行匹配如果字符匹配两个指针都向前移动如果字符不匹配且 j0根据 next 数组回退 j 指针如果字符不匹配且 j0只移动 i 指针当 j 等于模式串长度时匹配成功返回起始位置代码解析class Solution { public int strStr(String haystack, String needle) { int m haystack.length(), n needle.length(); if (n 0) return 0; // 空字符串直接返回 0 // 1. 构建 next 数组部分匹配表 int[] next new int[n]; int i 1, len 0; // len 记录当前最长公共前后缀长度 while(i n) { // 如果当前字符与 len 位置的字符匹配 while(i n needle.charAt(i) needle.charAt(len)) { len; next[i] len; // 记录当前位置的最长公共前后缀长度 i; } // 处理不匹配的情况 if (i n) { if (len 0) { // 回退到前一个最长公共前后缀的位置 len next[len - 1]; } else { // len 已经是 0当前位置的 next 值为 0 len 0; i; } } } // 2. 使用 next 数组进行匹配 i 0; // 主串指针 int j 0; // 模式串指针 while(i m j n) { // 字符匹配时两个指针都向前移动 while(i m j n haystack.charAt(i) needle.charAt(j)) { i; j; } // 如果模式串完全匹配返回起始位置 if (j n) { return i - n; } // 字符不匹配时的处理 if (j n) { if (j 0) { // 根据 next 数组回退模式串指针 i i - j next[j - 1] 1; // 主串指针移动到下一个可能匹配的位置 j next[j - 1]; // 模式串指针回退到最长公共前后缀的位置 } else { // 模式串第一个字符就不匹配只移动主串指针 i; } } } return -1; // 未找到匹配 } }时间复杂度O(mn)其中 m 是 haystack 长度n 是 needle 长度。构建 next 数组需要 O(n)匹配过程需要 O(m)。空间复杂度O(n)需要额外的 next 数组存储部分匹配信息。优点效率高避免了主串指针的回溯适合处理长字符串匹配。缺点实现相对复杂需要理解部分匹配表的概念。应用场景文本编辑器查找、IDE 代码搜索、生物信息学中的基因序列匹配等需要高效字符串匹配的场景。

相关新闻

从1家店到100家店:SD-WAN如何解决连锁企业多门店组网难题

从1家店到100家店:SD-WAN如何解决连锁企业多门店组网难题

近几年 , 连锁零售正在加速向跨区域经营发展。便利店、药店、餐饮、服饰门店往往从一个城市扩展到多个省份 , 门店数量从几十家增加到数百家。与此同时 , 收银系统、会员系统、库存同步、外卖平台、视频监控和电子价签都离不开稳定网络。网络一旦卡顿 , 影响的不只是上网体验 ,…

2026/7/30 19:08:57 阅读更多 →
Xiaomi Miloco实战指南:从零构建智能家居AI管家

Xiaomi Miloco实战指南:从零构建智能家居AI管家

Xiaomi Miloco实战指南:从零构建智能家居AI管家 【免费下载链接】xiaomi-miloco Xiaomi Miloco 项目地址: https://gitcode.com/gh_mirrors/xi/xiaomi-miloco 你是否想过拥有一个能够真正理解家庭环境、识别家庭成员、主动提供贴心服务的AI管家?X…

2026/7/30 19:08:57 阅读更多 →
多智能体系统时变编队控制与Matlab仿真实现

多智能体系统时变编队控制与Matlab仿真实现

1. 线性多智能体系统编队控制概述多智能体系统协同控制在无人机编队、智能交通、工业机器人等领域具有广泛应用价值。时变编队跟踪控制要求跟随者智能体在动态环境中保持与领航者的相对位置关系,同时适应外部干扰和系统参数变化。这个Matlab仿真项目完整实现了分布式…

2026/7/30 19:08:57 阅读更多 →

最新新闻

3个关键步骤:如何为Obsidian知识库构建自动化编程接口

3个关键步骤:如何为Obsidian知识库构建自动化编程接口

3个关键步骤:如何为Obsidian知识库构建自动化编程接口 【免费下载链接】obsidian-local-rest-api A secure REST API and Model Context Protocol (MCP) server for your vault. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-local-rest-api Obsid…

2026/7/30 19:26:02 阅读更多 →
Total Registry终极指南:Windows注册表编辑器开源替代方案完整教程

Total Registry终极指南:Windows注册表编辑器开源替代方案完整教程

Total Registry终极指南:Windows注册表编辑器开源替代方案完整教程 【免费下载链接】TotalRegistry Total Registry - enhanced Registry editor/viewer 项目地址: https://gitcode.com/gh_mirrors/to/TotalRegistry 你是否曾因Windows自带的Regedit功能简陋…

2026/7/30 19:26:02 阅读更多 →
Ansible Role - GitLab变量配置终极指南:30+常用参数让部署更灵活

Ansible Role - GitLab变量配置终极指南:30+常用参数让部署更灵活

Ansible Role - GitLab变量配置终极指南:30常用参数让部署更灵活 【免费下载链接】ansible-role-gitlab Ansible Role - GitLab 项目地址: https://gitcode.com/gh_mirrors/an/ansible-role-gitlab Ansible Role - GitLab是一个功能强大的自动化部署工具&…

2026/7/30 19:26:02 阅读更多 →
LunaTV架构深度解析:构建现代化Next.js影视聚合平台的技术实践

LunaTV架构深度解析:构建现代化Next.js影视聚合平台的技术实践

LunaTV架构深度解析:构建现代化Next.js影视聚合平台的技术实践 【免费下载链接】LunaTV 本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源 项目地址: https://gitcode.com/gh_mirrors/lu/L…

2026/7/30 19:26:02 阅读更多 →
小说改漫剧工具的技术架构选型与落地实践

小说改漫剧工具的技术架构选型与落地实践

随着 AIGC 在内容产业的深度落地,小说改漫剧赛道迎来快速增长,“小说改漫剧用什么工具” 也成为很多技术团队和创业者关心的问题。从技术实现的角度看,不同类型的工具对应着不同的技术架构路线,其产能上限、一致性表现、落地成本差…

2026/7/30 19:26:02 阅读更多 →
ChatTTS本地语音合成实战指南:打造专属AI配音系统

ChatTTS本地语音合成实战指南:打造专属AI配音系统

ChatTTS本地语音合成实战指南:打造专属AI配音系统 【免费下载链接】ChatTTS-ui 一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into s…

2026/7/30 19:25:02 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻