LeetCode 28 找出字符串中第一个匹配项的下标

题目描述

找出字符串中第一个匹配项的下标

给你两个字符串 haystackneedle ,请你在 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 <= 104
  • haystackneedle 仅由小写英文字符组成

解法

  1. 暴力解法

暴力解法:遍历haystack,如果找到与needle第一个字母相同的,再继续比较后面的字符

java代码:

class Solution {public int strStr(String haystack, String needle) {// 遍历haystackfor (int i = 0; i < haystack.length(); i++) {// 找到了与needle第一个字母相同的if (haystack.charAt(i) == needle.charAt(0)) {// 如果needle长度为1,直接返回if (needle.length() == 1) {return i;}// 继续与needle后面的比较boolean isEqual = true;for (int j = 1; j < needle.length(); j++) {if (i + j >= haystack.length() || haystack.charAt(i + j) != needle.charAt(j)) {isEqual = false;break;}}if (isEqual) {return i;}}}return -1;}
}

复杂度

  • 时间复杂度:O(n × m),其中 n 是字符串 haystack 的长度,mmm 是字符串 needle 的长度
  • 空间复杂度:O(1)
  1. KMP算法

KMP算法比较复杂,需要大量篇幅。推荐代码随想录的讲解,简单透彻:KMP算法

java代码:

class Solution {/*** KMP解法** @param haystack* @param needle* @return*/public int strStr(String haystack, String needle) {if(needle.length()==0){return 0;}// 得到next数组int[] next = new int[needle.length()];getNext(next, needle);int j = -1;for(int i = 0; i<haystack.length();i++){// 如果遇到后缀不相等,就回溯while(j>=0 && haystack.charAt(i) != needle.charAt(j+1)){j = next[j];}// 如果相等,就把j向后移动if(haystack.charAt(i)==needle.charAt(j+1)){j++;}// 模式字符串遍历完时,全部匹配,返回结果if(j==needle.length()-1){return (i-needle.length()+1);}}return -1;}/*** KMP算法辅助函数:找到前缀表的next数组* 思路:这里使用前缀表统一减一的操作来找next数组*      定义两个指针i和j,j指向前缀终止位置(严格来说是终止位置减一的位置),i指向后缀终止位置(与j同理)*      初始化:int j = -1; next[0] = j;*      前后缀不相同处理:如果 模式串 s 的s[i] 与 s[j+1]不相同,也就是遇到前后缀末尾不相同的情况,就要向前回溯*      前后缀相同:同时向后移动i 和j,同时还要将j(前缀的长度)赋给next[i], 因为next[i]要记录相同前后缀的长度** @param s* @return*/private void getNext(int[] next, String s) {int j = -1;next[0] = j;for (int i = 1; i < s.length(); i++) { // 注意i从1开始// 如果不相等,要进行回溯,注意要一直进行回溯,所以用whilewhile (j >= 0 && (s.charAt(i) != s.charAt(j + 1))) {// next[j]就是记录着j(包括j)之前的子串的相同前后缀的长度,要找 j+1前一个元素在next数组里的值(就是next[j])j = next[j];}if(s.charAt(i)==s.charAt(j+1)){j++;}next[i] = j;}}
}

复杂度

  • 时间复杂度:O(n+m)
  • 空间复杂度:O(m)

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

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

相关文章

LLM Agent之数据分析领域的应用

数据分析&#xff1a;Data-Copilot paper: Data-Copilot: Bridging Billions of Data and Humans with Autonomous Workflow github: https://github.com/zwq2018/Data-Copilot 先介绍下浙大提出的已扩展的数据分析框架&#xff0c;支持多种金融数据类型的查询&#xff0c;数…

Vue3-40-路由- 动态路由

说明 本文主要介绍了 对路由的动态配置&#xff0c;主要包括以下几个部分&#xff1a;1、判断某个路由是否存在&#xff1b;2、查看路由对象中的所有路由配置&#xff1b;3、添加一个路由&#xff1b;4、删除一个路由。针对上述四个方面&#xff0c;vue-router 中提供了对应的…

论文笔记 Understanding Electricity-Theft Behavior via Multi-Source Data

WWW 2020 oral 1 INTRO 1.1 背景 1.1.1 窃电 窃电&#xff08;electricity theft&#xff09;指用户为了逃避电费而进行非法操作的一种行为 常用的反窃电方法可分为两类&#xff1a; 基于硬件驱动的反窃电方法 ​​​​​​​电表开盖检测、集中器检测。。。。 硬件驱动的…

MySQL之视图案例

目录 一.视图1.1 含义1.2 操作 二.案例三.思维导图 一.视图 1.1 含义 虚拟表&#xff0c;和普通表一样使用 1.2 操作 1.创建视图 create view 视图名 as 查询语句&#xff1b; 2.视图的修改 方式一&#xff1a; create or replace view 视图名 as 查询语句 方式二&#x…

图像分割-Grabcut法(C#)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的VB版本请访问&#xff1a;图像分割-Grabcut法-CSDN博客 GrabCut是一种基于图像分割的技术&#xff0c;它可以用于将图像中的…

Linux第15步_安装FTP客户端

安装完FTP服务器后&#xff0c;还需要安装FTP客户端&#xff0c;才可以实现Ubuntu系统和Windows系统进行文件互传。 1、在STM32MP157开发板A盘基础资料\03软件中&#xff0c;找到“FileZilla_3.51.0_win64-setup.exe”&#xff0c;双击它&#xff0c;就可以安装。 2、点击“I …

第5章-第8节-Java面向对象中的内部类

1、内部类&#xff1a;属于类的成员之一&#xff0c;类的内部又定义类&#xff0c;外层的class称为外部类&#xff0c;内部的class称为内部类。 设计了某个类&#xff0c;根据需求发现其内部又需要定义一个独立的内部结构&#xff0c;此时就考虑将其定义为内部类&#xff0c;内…

docker 相关常用命令---持续更新

注意&#xff0c;如果命令从文档复制过来在执行总是失败&#xff0c;然后又确定自己的命令没有错&#xff0c;那就自己手工敲命令&#xff0c;有的命令内容复制就是不行&#xff0c;手工敲就没问题了。 #查看容器站点运行日志 --tail500 查看500行&#xff0c; 后面的是容器…

uView Skeleton 骨架屏

骨架屏一般用于页面在请求远程数据尚未完成时&#xff0c;页面用灰色块预显示本来的页面结构&#xff0c;给用户更好的体验。 说明 由于VUE和NVUE的特性不同&#xff0c;组件动画在VUE上为由左到右形式&#xff0c;在NVUE上为明暗显隐的形式。 #平台差异说明 App&#xff0…

Fontfabric:一款字体与设计的完美结合

一、产品介绍 Fontfabric是一款由国际字体设计公司Fontfabric开发的字体设计软件。它提供了一整套完整的字体设计工具&#xff0c;让用户可以轻松地创建、设计和定制自己的字体。Fontfabric拥有丰富的字体库&#xff0c;包括各种风格和类型&#xff0c;能够满足用户在不同场景…

2023年山东省职业院校技能大赛高职组“软件测试”赛项-接口测试报告答案(含术语)

任务五 接口测试 目录 接口测试任务要求 接口测试报告 目的 术语定义 <

安全加密基础—基本概念、keytool、openssl

安全加密基础—基本概念、keytool、openssl 目录 前言 一、概念 明文通信 无密钥密文通信 对称加密 非对称加密 数字签名 消息摘要(MD5) CA数字证书(解决公钥分发的问题) HTTPS 相关文件扩展名 常用后缀名 普通的pem文件内容 二、keytool 2.1常用的命令如下 2…

用mysql进行简单的分析查询

在MySQL中进行简单的分析查询通常涉及使用一些聚合函数和条件筛选来获取有关数据集的汇总信息。以下是一些常见的分析查询示例&#xff1a; 计算平均值&#xff1a; SELECT AVG(column_name) AS average_value FROM table_name;计算总和&#xff1a; SELECT SUM(column_name) A…

docker 完成MySQL的主从复制

文章目录 搭建步骤 搭建步骤 拉取镜像 docker pull mysql:5.7运行主从 docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_P…

外包干了1个月,技术退步一大半。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Word2Vector介绍

Word2Vector 2013 word2vec也叫word embeddings&#xff0c;中文名“词向量”&#xff0c;google开源的一款用于词向量计算的工具&#xff0c;作用就是将自然语言中的字词转为计算机可以理解的稠密向量。在word2vec出现之前&#xff0c;自然语言处理经常把字词转为离散的单独的…

c语言版:数据结构(时间复杂度,空间复杂度,练习)

时间复杂度 概念 时间复杂度是用来衡量算法执行时间的一个指标。它表示随着输入规模的增加&#xff0c;算法执行时间的增长率。时间复杂度通常用大O符号表示。 在计算时间复杂度时&#xff0c;通常会忽略常数项、低阶项和系数项&#xff0c;只关注随着输入规模增长而导致的主要…

量化简介和模式

1.量化简介 量化主要是一种加速推理的技术&#xff0c;量化运算符仅支持前向传递。量化是指使用精度较低的数据进行计算和内存访问的技术&#xff0c;与浮点实现相比&#xff0c;通常是 int8。这可以在几个重要领 (1).域实现性能提升&#xff1a; (2).模型尺寸缩小 4 倍&#…

代码随想录算法训练营第57天|● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇

647. 回文子串 中等 相关标签 相关企业 提示 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使…

【Python百宝箱】边缘计算Python库大揭秘:构建高效、智能的IoT系统

连接与计算&#xff1a;深度解析Python库在边缘计算中的角色 前言 随着边缘计算在物联网和分布式系统中的广泛应用&#xff0c;寻找适用于边缘设备的Python库变得愈发重要。本文将探索多个Python库&#xff0c;涵盖了边缘计算的各个方面&#xff0c;从设备管理、分布式计算到…