当前位置: 首页 > news >正文

面试经典150题——找出字符串中第一个匹配项的下标

面试经典150题 day23

      • 题目来源
      • 我的题解
        • 方法一 库函数
        • 方法二 自定义indexOf函数
        • 方法三 KMP算法

题目来源

力扣每日一题;题序:28

我的题解

方法一 库函数

直接使用indexOf函数。

时间复杂度:O(n)
空间复杂度:O(1)

public int strStr(String haystack, String needle) {return haystack.indexOf(needle);
}
方法二 自定义indexOf函数

每次找到needle开始字符匹配的位置,然后从该位置开始判断是否能够生成needle字符串。

时间复杂度:O(nm)。外层循环遍历了 haystack 字符串的每个字符,内层循环则在 needle 字符串的长度范围内进行比较。因此,时间复杂度为 O(nm),其中 n 是 haystack 字符串的长度,m 是 needle 字符串的长度。
空间复杂度:O(1)

public int strStr(String haystack, String needle) {int n=haystack.length();for(int i=0;i<=n-needle.length();i++){if(haystack.charAt(i)==needle.charAt(0)&&indexOf(haystack,needle,i)){return i;}}return -1;
}
public boolean indexOf(String haystack,String needle,int start){int n=needle.length();int i=0;while(i+start<haystack.length()&&i<n&&haystack.charAt(i+start)==needle.charAt(i))i++;return i==n?true:false;
}
方法三 KMP算法

KMP算法详情参见:宫水三叶

时间复杂度:O(n+m)。其中 n 是字符串 haystack 的长度,m 是字符串 needle 的长度。至多需要遍历两字符串一次。
空间复杂度:O(m)

public int strStr(String haystack, String needle) {return KMP(haystack,needle);
}
public int KMP(String haystack,String needle){int m=haystack.length();int n=needle.length();if(needle==null||n==0)return 0;int next[]=new int[n];char need[]=needle.toCharArray();int i=1,j=0;// 构造next数组while(i<n){//if(need[i]==need[j]){j+=1;next[i]=j;i++;}else{if(j==0){next[i]=0;i++;}else{j=next[j-1];}}}i=0;j=0;char hay[]=haystack.toCharArray();while(i<m){if(hay[i]==need[j]){i++;j++;}else{if(j==0){i++;}else{j=next[j-1];}}if(j==n)return i-j;}return -1;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关文章:

面试经典150题——找出字符串中第一个匹配项的下标

面试经典150题 day23 题目来源我的题解方法一 库函数方法二 自定义indexOf函数方法三 KMP算法 题目来源 力扣每日一题&#xff1b;题序&#xff1a;28 我的题解 方法一 库函数 直接使用indexOf函数。 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) public int str…...

.Net MAUI 搭建Android 开发环境

一、 安装最新版本 VS 2022 安装时候选择上 .Net MAUI 跨平台开发 二、安装成功后,创建 .Net MAUI 应用 三、使用 VS 自带的 Android SDK 下载 ,Android镜像、编译工具、加速工具 四、使用Vs 自带的 Android Avd 创建虚拟机 五、使用 Android 手机真机调试...

编译适配纯鸿蒙系统的ijkplayer中的ffmpeg库

目前bilibili官方的ijkplayer播放器&#xff0c;是只适配Android和IOS系统的。而华为接下来即将发布纯harmony系统&#xff0c;是否有基于harmony系统的ijkplayer可以使用呢&#xff1f; 鸿蒙版ijkplayer播放器是哪个&#xff0c;如何使用&#xff0c;这个问题&#xff0c;大家…...

离线维护麒麟操作系统

1 本地源设置 a 首先传输一个镜像ISO文件到离线系统。 b 加载镜像文件作为源文件。 #mkdir /mnt/cdrom #mount -o path/镜像.iso /mnt/cdromc 修改源文件 # cd /etc/yum.repo.d/ # vi base.repo 修改baseurl file:///mnt/cdrom d update &install 然后就可以愉快的…...

leetcode尊享面试——二叉树(python)

250.统计同值子树 使用dfs深度搜索&#xff0c;同值子树&#xff0c;要满足三个条件&#xff1a; 对于当前节点node&#xff0c;他的左子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;右子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;node的值等于…...

macbookpro 安装linux mint 无线wifi无法连接 解决方案

见欢迎页面—驱动管理...

抖音小店如此内卷,现在还值得投入吗?还能赚到钱吗?

大家好&#xff0c;我是电商笨笨熊 抖音小店已经经历4-5年的风霜&#xff0c;所以现在很多还未入驻的玩家都会有一个顾虑&#xff1b; 担心现在进入抖店是都还具备发展空间&#xff0c;还能不能赚到钱&#xff1b; 尤其是当一片市场逐渐加入越来越多商家的时候平台一定会内卷…...

Java基础知识(11)

Java基础知识&#xff08;11&#xff09; &#xff08;包括&#xff1a;IO流高级流&#xff0c;网络爬虫基础&#xff0c;Commons-i0工具包和Hutool工具包&#xff09; 目录 Java基础知识&#xff08;11&#xff09; 一.IO流高级流 1.缓冲流 【1】字节缓冲流 &#xff0…...

iOS——SDWebImage源码学习

什么是SDWebImage SDWebImage是一个流行的iOS和macOS平台上的开源库&#xff0c;用于异步加载和缓存网络图片。它提供了一套简单易用的API&#xff0c;使得在应用中加载网络图片变得更加方便和高效。 主要特点和功能&#xff1a; 异步加载&#xff1a;SDWebImage通过异步方式…...

信创基础软件之中间件

信创基础软件之中间件 中间件概述 中间件是一种应用于分布式系统的基础软件&#xff0c;位于应用与操作系统、数据库之间&#xff0c;主要用于解决分布式环境下数据传输、数据访问、应用调度、系统构建和系统集成、流程管理等问题&#xff0c;是分布式环境下支撑应用开发、运…...

在Ubuntu linux操作系统上操作MySQL数据库常用的命令

检查是否安装了MySQL&#xff0c;或检查MySQL的状态&#xff1a; sudo systemctl status mysql或 sudo systemctl status mysql.service如果mysql有安装&#xff0c;上面这条命令会返回mysql的状态active或inactive。 卸载mysql数据库 第一步是停了数据库&#xff1a; sud…...

前端科举八股文-JAVASCRIPT篇

前端科举八股文-JAVASCRIPT篇 Js的变量类型&#xff0c;区别是什么平时有用过symbol吗函数闭包的理解?js的原型链&#xff1f; Function Function.constructor 返回值&#xff1f;promise的出现是为了解决什么问题&#xff1f;前端中的事件流事件委托?js的new操作符做了哪些…...

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…...

Linux的iptables防火墙基础介绍

iptables 防火墙 应用层软件----管理 内核级netfilter 硬件-------内核----网络—netfilter/kvm----- app iptables iptables—控制netfilter 过滤&#xff1a;<smac/sip/dip/sport/dport/状态> TCP/IP 应用层 传输层 sport dport 状态 <三次握手/四次断开> 网…...

deepspeed+transformers模型微调

一、目录 代码讲解 二、实现。 1、代码讲解&#xff0c;trainer 实现。 transformers通过trainer 集成deepspeed功能&#xff0c;所以中需要进行文件配置&#xff0c;即可实现deepspeed的训练。 微调代码&#xff1a; 参数定义—>数据处理---->模型创建/评估方式----&…...

无人机摄影测量数据处理、三维建模及在土方量计算中的应用

专题一、无人机摄影测量技术应用现状及其发展 1、无人机摄影测量技术概述 2、摄影测量系统的发展 3、无人机摄影测量技术应用分析 专题二、基本原理和关键技术讲解 1、摄影测量基础知识 1&#xff09;航空摄影 2&#xff09;航摄像片的方位元素 3&#xff09;共…...

《ESP8266通信指南》15-MQTT连接、订阅MQTT主题并打印消息(基于Lua|适合新手|非常简单)

往期 《ESP8266通信指南》14-连接WIFI&#xff08;基于Lua&#xff09;-CSDN博客 《ESP8266通信指南》13-Lua 简单入门&#xff08;打印数据&#xff09;-CSDN博客 《ESP8266通信指南》12-Lua 固件烧录-CSDN博客 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP826…...

LeetCode:两数之和

文章收录于LeetCode专栏 LeetCode地址 两数之和 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在该数组中找出和为目标值的那两个整数&#xff0c;并返回它们的数组下标。   你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。…...

CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前

机缘 Hello&#xff0c;大家好&#xff0c;我是景天&#xff0c;其实很早之前我就加入到了CSND的大军&#xff0c;彼时我还是个刚毕业的小白白&#xff0c;时常过来CSND汲取养料&#xff0c;就这样&#xff0c;慢慢的来提升自己&#xff0c;强大自己。工作锻炼了我&#xff0c…...

MySQL数据库中的浮点类型和高精度类型有什么区别?为什么不推荐使用浮点类型?

在软件开发中&#xff0c;作为后端&#xff0c;无可避免的需要熟练使用 MySQL 数据库进行数据存储和读取。对于信息系统而言&#xff0c;数据库的的地位不言而喻。那作为软件开发工程师&#xff0c;在使用 MySQL 过程中&#xff0c;又有哪些需要注意的呢&#xff1f;我们从实际…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...