Leetcode 每日一题 28.找出字符串中第一个匹配的下标

问题描述

给定两个字符串 haystackneedle,我们需要在 haystack 中找出 needle 字符串的第一个匹配项的下标。如果 needle 不是 haystack 的一部分,则返回 -1。

暴力搜索算法

暴力搜索算法是一种简单直观的字符串匹配方法。它的基本思想是:从 haystack 的每个可能的起始位置开始,检查是否有与 needle 相匹配的子串。

算法步骤

  1. 检查空字符串:如果 needle 是空字符串,根据题意返回 0。
  2. 获取长度:获取 needle 和 haystack 的长度。
  3. 遍历 haystack:遍历 haystack,对于每个可能的起始位置,使用内层循环检查 needle 是否匹配。
  4. 字符比较:在内层循环中,比较 haystack 的子串和 needle 的每个字符。
  5. 返回结果:如果找到匹配项,返回匹配项的下标;如果遍历完 haystack 都没有找到匹配项,返回 -1。

Java 实现

以下是使用暴力搜索算法解决字符串匹配问题的 Java 实现:

 

java

class Solution {public int strStr(String haystack, String needle) {// 如果needle为空字符串,根据题意返回0if (needle.isEmpty()) return 0;// 获取needle和haystack的长度int m = needle.length();int n = haystack.length();// 遍历haystackfor (int i = 0; i <= n - m; i++) {// 从当前位置开始比较needle和haystack的子串是否相等for (int j = 0; j < m; j++) {// 如果不相等,跳出内层循环,继续外层循环if (haystack.charAt(i + j) != needle.charAt(j)) {break;}// 如果相等,继续比较下一个字符if (j == m - 1) {return i; // 如果比较完needle的最后一个字符,说明找到了匹配项,返回下标}}}// 如果遍历完haystack都没有找到匹配项,返回-1return -1;}
}

代码解释

  1. 处理特殊情况:如果 needle 是空字符串,根据题意返回 0。
  2. 获取长度:获取 needle 和 haystack 的长度。
  3. 遍历 haystack:使用外层循环遍历 haystack,内层循环遍历 needle
  4. 字符比较:在内层循环中,比较 haystack 的当前子串和 needle 的每个字符。
  5. 返回结果:如果找到匹配项,返回匹配项的下标;如果遍历完 haystack 都没有找到匹配项,返回 -1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aws中AcmClient.describeCertificate返回值中没有ResourceRecord

我有一个需求&#xff0c;就是让用户自己把自己的域名绑定我们的提供的AWS服务器。 AWS需要验证证书 上一篇文章中我用php的AcmClient中的requestCertificate方法申请到了证书。 $acmClient new AcmClient([region > us-east-1,version > 2015-12-08,credentials>[/…

C++20 概念与约束(2)—— 初识概念与约束

《C20 概念与约束&#xff08;1&#xff09;—— SFINAE》 ●《C20 概念与约束&#xff08;2&#xff09;—— 初识概念与约束》 《C20 概念与约束&#xff08;3&#xff09;—— 约束的进阶用法》 1、概念 C20 中引入新的编译期关键字 concept 用于创建概念。个人认为将其…

拦截器实现http请求访问本地图片

本文来记录下拦截器实现http请求访问本地图片 文章目录 概述代码实现本文小结 概述 如下图&#xff0c;本机(服务器)存储的图片想要在浏览器上通过Url地址访问&#xff1a; 浏览器直接访问 代码实现 烂机器实现文件真实地址和物理地址之间的映射 Slf4j Configuration public cl…

Python技巧:查询模块的版本号的方法

1,pycharm里面的 Python interpreter 或者 Python package 2&#xff0c;通过 __version_info__ import matplotlib print(matplotlib.__version_info__) 3&#xff0c;查看目录里面的 _version.py 文件

计算机网络——HTTP篇

基础篇 IOS七层网络模型 TCP/IP四层模型&#xff1f; 应⽤层&#xff1a;位于传输层之上&#xff0c;主要提供两个终端设备上的应⽤程序之间的通信&#xff0c;它定义了信息交换的格式&#xff0c;消息会交给下⼀层传输层来传输。 传输层的主要任务就是负责向两台设备进程之间…

Unity插件NodeCanvas之行为树的详细教程

文章目录 前言叶节点 Leafs1、行为 Action2、判断 Condition控制组件 Composites1、顺序执行器 Sequencer2、选择执行器 Selector3、概率选择执行器 Probability Selector4、权重选择执行器 Priority Selector5、平行执行器 Parallel6、轮流选择器 Flip Selector7、完整执行器 …

Qt 使用QTreeView显示并动态的增删改查JSON文件数据

文章目录 效果图概述部分代码总结 效果图 概述 本案例在此开源项目QJsonModel的基础上实现&#xff0c;动态的生成并操作JSON数据&#xff0c;QJsonModel是一个基于QAbstractItemModel的JSON数据模型&#xff0c;它提供了一种简单的方式来将JSON数据可视化&#xff0c;功能简单…

计算机专业可以报考公务员吗?都有哪些职位?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 计算机专业是历年来考公的热门专业&#xff0c;岗位较多&#xff0c;且研究生进入体制内直接是副科级待遇&#xff0c;铁饭碗还是很香的&#xff01; 25国考计算机专业可以选择的岗位 招聘人数&#xff1a;学硕>专硕…

视频智能分析平台LiteAIServer算法定制未戴安全帽检测技术:智能安防领域的新篇章

在当今这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;和计算机视觉技术的飞速发展正在以前所未有的速度改变我们的生活、工作乃至整个社会的面貌。在建筑行业中&#xff0c;安全问题一直是重中之重&#xff0c;而工人未戴安全帽的问题更是工地安全管理…

C++ 优先算法 —— 四数之和(双指针)

目录 题目&#xff1a;四数之和 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 双指针算法 不漏的处理&#xff1a; 去重处理&#xff1a; 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 双指针算法 题目&#xff1a;四数之和 1. 题目解析 题目截图&#xff1a; 这道题与三数之和&am…

思考:linux Vi Vim 编辑器的简明原理,与快速用法之《 7 字真言 》@ “鱼爱返 说 温泉啊“ (**)

Linux vi/vim | 菜鸟教程 https://zhuanlan.zhihu.com/p/602675406 Linux Vim编辑器的基本使用_vim文本编辑器-CSDN博客 这里提出使用 vi / vim 进行简单的编辑操作的原因&#xff0c;主要是在容器镜像中&#xff0c;普遍都是使用这个。 在 linux 服务器应用场景&#x…

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

目录 一、前言 二、栈是排列方式 三、栈的单词 四、程序中的栈 五、栈的方法 1.声明并初始化栈 2.往栈里放东西&#xff08;学名&#xff1a;入栈&#xff09; 3.从栈往外拿东西 &#xff08;学名&#xff1a;出栈&#xff09; 4.清空栈 5.遍历 Stack 6.获取Stack的长…

React Query在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 引言 React Query …

面试题之---解释一下原型和原型链

实例化对象 和普调函数一样&#xff0c;只不过调用的时候要和new连用&#xff08;实例化&#xff09;&#xff0c;不然就是一个普通函数调用 function Person () {} const o1 new Person() //能得到一个空对象 const o2 Person() //什么也得不到&#xff0c;这就是普通的…

Java项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网技术的快速发展&#xf…

【Linux】阿里云服务器搭建gradio实例

文章目录 0 前言1 整体结构2 Python开放环境搭建2.1 SSL安装2.2 python安装 3 开发3.1 工具使用3.2 gradio3.3 langchain 4 nginx部署4.1 下载安装4.2 配置访问gradio 5 服务编写6 扩展&#xff1a;安装软件步骤总结 0 前言 因为课程原因&#xff0c;需要做一个大模型相关的大作…

vue3中如何实现标准元素 拖动 功能 【收藏备用】

最近在用vue3做一个企业后台管理系统的项目,在登录页面的时候需要用户滑动滑块来获取验证码登录系统 用到了元素拖放 这里也顺便记录一下 如何使用的. 目录 1.功能介绍 2.代码部分 3 实现过程 3.1 设置可拖动元素 3.2 拖动什么 3.3 放到何处 3.4 进行放置 1.功能介绍…

小水电远程集控运维系统简介及应用价值

一、政策背景 2023年7月14日水利部办公厅印发了《智能化小型水电站技术指南( 试行)》和&#xff08;《小水电集控中心技术指南( 试行)》两个指导性文件&#xff0c;明确要求实施小水电绿色改造和现代化提升工程&#xff0c;推进建设智能集约的现代化小水电。 二、系统概述 小…

公司电脑加全屏水印怎么加(怎么打水印满屏)?4个方法精选!包教包会!

在企业管理中&#xff0c;为了保护公司机密信息的安全&#xff0c;给公司电脑添加全屏水印已成为一种常见的安全措施。 全屏水印不仅可以震慑潜在的窥探者&#xff0c;还能在信息不慎泄露时提供追溯线索。 那么&#xff0c;如何给公司电脑添加全屏水印呢&#xff1f; 以下是4…

AI大模型开发架构设计(18)——基于大模型构建企业知识库案例实战

文章目录 1 LLM 大模型在工作中的实际应用以及局限性LLM 大模型工作中实际应用大模型2点局限性 2 基于大模型和向量数据库的企业级知识库架构剖析向量数据库向量数据库选型知识库文档检索增强(Retrieval Augmented Generation)向量数据库应用技术总体架构向量数据库应用离线索引…