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 代码搜索、生物信息学中的基因序列匹配等需要高效字符串匹配的场景。

相关新闻

JAVA练习371- 最长公共前缀

JAVA练习371- 最长公共前缀

题目概览 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl" 示例 2&am…

2026/7/30 19:10:29阅读更多 →
JAVA练习370- 最后一个单词的长度

JAVA练习370- 最后一个单词的长度

题目概览 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hello World" 输出&am…

2026/7/30 19:10:29阅读更多 →
流域水电智慧调度:基于土星云SE110S系列的“站-域-云”边缘实践

流域水电智慧调度:基于土星云SE110S系列的“站-域-云”边缘实践

本文导读流域梯级调度三大核心痛点:站点分散、数据滞后、协同低效四级边云协同架构与偏远场站硬件选型思路水文预测、梯级调度、调峰响应的边缘落地实现流域调度项目应用成效与实践经验做流域水电调度的朋友都有体会:梯级电站横跨几百公里,偏…

2026/7/30 19:10:29阅读更多 →
Helion分布式训练支持:多GPU/TPU环境下的高效内核开发

Helion分布式训练支持:多GPU/TPU环境下的高效内核开发

Helion分布式训练支持:多GPU/TPU环境下的高效内核开发 【免费下载链接】helion A Python-embedded DSL that makes it easy to write fast, scalable ML kernels with minimal boilerplate. 项目地址: https://gitcode.com/gh_mirrors/hel/helion Helion是一…

2026/7/30 20:20:57阅读更多 →
【限时解密】通义千问文档解析私有化部署中的3个未公开API与2种OCR融合策略(仅开放至Q3末)

【限时解密】通义千问文档解析私有化部署中的3个未公开API与2种OCR融合策略(仅开放至Q3末)

更多请点击: https://codechina.net 第一章:通义千问文档解析概述 通义千问(Qwen)作为大规模语言模型,其官方文档是开发者理解模型能力、接口规范与最佳实践的核心依据。文档解析并非简单阅读,而是系统性地…

2026/7/30 20:20:57阅读更多 →
Steam创意工坊下载终极指南:用WorkshopDL实现跨平台模组自由

Steam创意工坊下载终极指南:用WorkshopDL实现跨平台模组自由

Steam创意工坊下载终极指南:用WorkshopDL实现跨平台模组自由 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为GOG、Epic等平台的游戏无法享用Steam创意工坊的丰…

2026/7/30 20:20:57阅读更多 →
【企业级AI成本治理白皮书】:基于217家客户实测数据,重构TCO模型的4个颠覆性参数

【企业级AI成本治理白皮书】:基于217家客户实测数据,重构TCO模型的4个颠覆性参数

更多请点击: https://kaifayun.com 第一章:AI成本结构分析的范式迁移 传统IT基础设施的成本模型以硬件折旧、机房能耗和人力运维为核心,而AI系统正推动成本重心从“静态资源占有”转向“动态计算消耗”。这一迁移不仅体现在单位算力价格的下…

2026/7/30 20:20:57阅读更多 →
League Akari:基于LCU API的英雄联盟智能客户端工具包完整指南

League Akari:基于LCU API的英雄联盟智能客户端工具包完整指南

League Akari:基于LCU API的英雄联盟智能客户端工具包完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在英雄联盟的激烈对…

2026/7/30 20:20:57阅读更多 →
10款终极macOS生产力工具:让你的Mac工作效率翻倍

10款终极macOS生产力工具:让你的Mac工作效率翻倍

10款终极macOS生产力工具:让你的Mac工作效率翻倍 【免费下载链接】awesome-macOS  A curated list of awesome applications, softwares, tools and shiny things for macOS. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-macOS macOS生产力…

2026/7/30 20:18:56阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

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

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

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →