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 文件

C语言串讲-3之函数和数组

1&#xff0e;函数名是一个指针&#xff0c;保存函数地址入口。函数名是函数的入口地址。函数的入口地址称为函数指针。 2&#xff0e;传参--本质是创建副本 &#xff08;1&#xff09;实参与形参 &#xff08;2&#xff09;值传递&#xff0c;指针传递&#xff0c;引用传递 …

【Java多线程】单例模式(饿汉模式和懒汉模式)

目录 单例模式的定义&#xff1a; 饿汉式--单例模式 定义&#xff1a; 案例&#xff1a; 优缺点&#xff1a; 懒汉式--单例模式&#xff1a; 定义&#xff1a; 1&#xff09;懒汉式单例模式&#xff08;非线程安全&#xff09; 2&#xff09;线程安全的懒汉式单例模…

计算机网络——HTTP篇

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

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

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

XPath:网络爬虫中的数据提取利器

1. XPath简介 XPath (XML Path Language) 是一种在XML和HTML文档中查找信息的语言。在网络爬虫中&#xff0c;XPath是一个非常强大的工具&#xff0c;可以帮助我们精确定位和提取需要的数据。 1.1 为什么选择XPath&#xff1f; 语法简单直观可以精确定位元素支持复杂的查询条…

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…

使用CSS和JavaScript实现动画效果

使用CSS和JavaScript实现动画效果是Web开发中常见的需求。两者各有优势和适用场景&#xff0c;下面将分别介绍使用CSS动画属性和JavaScript控制动画的不同方式。 一、使用CSS动画 CSS提供了一种简单且直观的方式来创建动画&#xff0c;主要通过以下两种方式&#xff1a; CSS…

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;需要做一个大模型相关的大作…