LeetCode 26 删除有序数组中的重复项

题目描述

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

给你两个字符串 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/593104.shtml

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

相关文章

minio服务数据迁移-rclone迁移工具

一、背景&#xff1a; 在生产运行过程中经常有遇见数据迁移的工作&#xff0c;这里介绍了如何进行minio服务的数据迁移过程。 二、迁移思路&#xff1a; minio服务/集群的数据迁移思路是需要新建一个配置、密码一样的minio服务/集群&#xff1b;在中间服务器上安装rclone工具&a…

atoi函数的模拟实现

这里强力推荐一篇文章 http://t.csdnimg.cn/kWuAm 详细解析了atoi函数以及其模拟实现&#xff0c;我这里就不说了。 这里作者先把自己模拟的代码给大家看一下。 int add(char* arr) {char* arr2 arr;while (*arr!-48){arr;}arr--;int sum 0;int n 0;while (arr ! (arr2-…

如何构建高效测试体系?掌握5大自动化测试模式就够了

软件开发过程中&#xff0c;高效的自动化测试体系是提升测试效率、保证产品质量关键&#xff0c;一个全面的测试体系涵盖多个维度&#xff0c;从功能性到用户界面&#xff0c;再到性能和安全性。 每个维度均采用不同的测试模式来满足特定的需求和解决特别的挑战&#xff0c;本…

快速打通 Vue 3(三):Vue3 中的 watch 监听器与新特性

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

风向再生变!智能汽车「竞合」博弈升级

新一轮科技革命影响下&#xff0c;全球汽车产业产品形态和格局被重塑&#xff0c;深度变革也随之而至。 高工智能汽车研究院监测数据显示&#xff0c;中国智能电动市场渗透率从2018年的0.32%&#xff08;占全部新能源车交付量&#xff09;快速提升至2022年的41.84%&#xff1b…

精选免费API接口汇总

笑话大全&#xff1a;各种最新、最及时的幽默、搞笑段子&#xff0c;不间断更新。历史上的今天&#xff1a;看看历史上的今天&#xff0c;都发生了什么重大事件。周公解梦 &#xff1a;周公解梦大全,周公解梦查询&#xff0c;免费周公解梦。标准体重计算器&#xff1a;身体质量…

为什么国产操作系统是基于linux研发的呢?

为什么国产操作系统是基于linux研发的呢&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&…

2023年AIGC发展回顾与展望

2023年是人工智能内容生成&#xff08;AIGC&#xff09;技术飞速发展的一年。从年初ChatGPT一炮打响&#xff0c;大家纷纷加入到大模型研究之中。期间Midjourney和Stable Diffusion AI绘画技术持续火热&#xff0c;基于AIGC类的应用也如雨后春笋般遍地开花。万众瞩目的OpenAI G…

SpringCloud Feign-声明性Http请求以及Hystrix-Http请求的熔断配置

1、OpenFeign 1.1 概述 – Feign是一个声明性web服务客户机。它使编写web服务客户机变得更容易。 – 它的使用方法是定义一个服务接口并在上面添加注解。 – Feign支持可插拔编码器和解码器。 – Spring Cloud对Feign进行了封装&#xff0c;使其支持SpringMVC标准注解和Httpttp…

1.1 理解大数据(2)

小肥柴的Hadoop之旅 1.1 理解大数据&#xff08;2&#xff09; 目录1.1 理解大数据1.1.3 大数据概述1.1.4 更多思考 参考文献和资料 目录 1.1 理解大数据 1.1.3 大数据概述 step_0 大数据定义 【《大数据算法设计分析》】&#xff1a; 通常来讲大数据&#xff08;Big Data&am…

生态系统服务构建生态安全格局中的实践技术应用

生态安全是指生态系统的健康和完整情况。生态安全的内涵可以归纳为&#xff1a;一&#xff0c;保持生态系统活力和内外部组分、结构的稳定与持续性&#xff1b;二&#xff0c;维持生态系统生态功能的完整性&#xff1b;三&#xff0c;面临外来不利因素时&#xff0c;生态系统具…

解决jenkins的Exec command命令不生效,或者执行停不下来的问题

Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上&#xff0c;在服务器上执行脚本时&#xff0c;脚本中的 nohup 命令无法执行&#xff0c;并不生效&#xff0c;我配置的Exec command命令是后台启动一个war包&#xff0c;并输出日志文件。 nohup java -jar /…

MySQL数据库连接超时和自动重连

1、当我们连接一个数据库的时候&#xff0c;当ip是错的&#xff0c;但是他还是很耗时间的&#xff0c;大概30s之后才会通知连接失败&#xff0c;该操作是十分费时的 所以可以使用 //&是你自己初始化的数据库名字 //&time3表示3秒连接不上&#xff0c;直接报错 int ti…

批量美化图片:让您的图片库焕然一新!

您是否曾经遇到过这样的问题&#xff1a;在处理大量图片时&#xff0c;一张一张地调整时间和精力成本太高&#xff1f;现在&#xff0c;我们为您带来了一款全新的批量图片美化工具&#xff0c;让您轻松解决这个问题&#xff01; 首先&#xff0c; 我们要进入首助编辑高手主页面…

(每日持续更新)jdk api之BufferedReader基础

&#xff08;每日持续更新&#xff09;jdk api之BufferedReader基础 1.8 BufferedReader BufferedReader 是 Java 中 Reader 的缓冲流实现&#xff0c;用于提高读取字符数据的性能。它提供了一些额外的属性和方法&#xff0c;以增强对字符流的操作。 以下是 BufferedReader …

/etc/profile文件一不小心改坏了,所有命令无法执行了怎么办?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 在部署jdk的时候&#xff0c;修改/etc/profile文件&#xff0c;文件改得有问题&#xff0c;但是当时没有…

【二】CocosCreator-CCGame.js源码分析

PS&#xff1a;只是看源码学习过程中把认为重要的内容以笔记的形式记录下来。 【1】config&#xff1a;当前游戏的一些配置 1.debugMode&#xff1a;用于控制输出日志的级别 2.showFPS&#xff1a;是否显示FPS 3.exposeClassName 4.frameRate&#xff1a;设置游戏帧率 5.id 6.…

redis单机部署

一、下载redis压缩包tar.gz 官网下载&#xff0c;现在一般用6.x以上版本 二、上传指定目录&#xff0c;解压缩 #假如上传到redis用户的家目录 cd /home/redis tar -zxvf redis-6.2.14.tar.gz 三、进入解压缩目录&#xff0c;进行编译 cd redis-6.2.14 make &&a…

SSH以及Dropbear介绍

SSH 1、什么是SSH (1)SSH仅仅是一种协议标准&#xff0c;目的是实现安全远程登录及安全网络服务。 2、实现SSH的工具有哪些 (1)开源OpenSSH&#xff0c;使用最广泛。 (2)Dropbear&#xff0c;轻量级SSH。 3、SSH可以实现的功能场景 (1)安全远程登录 (2)安全的端口转发 ①本地端…

【elfboard linux开发板】5.vmware tools安装及uart属性的获取和设置

1. 安装VMware tools 系统&#xff1a;ubuntu22.04 虚拟机版本&#xff1a;VMware workstation 16 pro&#xff08;16.1.2&#xff09; VMware tools文件&#xff08;iso)一般在虚拟机目录下&#xff0c;如果没有&#xff0c;这是下载网址&#xff0c;找到对应的虚拟机版本下载…