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

代码随想录-刷题第九天

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

题目链接:28. 找出字符串中第一个匹配项的下标

思路1:先来写一下暴力解法。

时间复杂度O(n*m)

class Solution {public int strStr(String haystack, String needle) {// 暴力解法先来一遍for (int i = 0; i < haystack.length(); i++) {if (i + needle.length() > haystack.length()) return -1;boolean targ = true;for (int j = 0; j < needle.length(); j++) {if (needle.charAt(j) != haystack.charAt(i + j)) {targ = false;}}if (targ) {return i;}}return -1;}
}

思路2:kmp

算法原理:通过前缀表(即next数组)来记录模式串与主串不匹配时,模式串应当从那里开始重新匹配。重点在于求解前缀表(即next数组)。next数组每个位置的值,就是从开始到当前位置的字符串的最长公共前缀(最长相等前缀)。一旦模式串与主串不匹配时,next数组当前位置的前一个位置的元素就是模式串要回退到的位置。

实现方法:先求解next数组,分为四步:

① 初始化,j指向前缀末尾位置,i指向后缀末尾位置;

② 当前后缀不相同时,前缀末尾进行回退;

③ 当前后缀相同时,前缀末尾加一;

④ next数组赋值。

然后根据next数组完成模式串与主串的匹配。

时间复杂度O(n+m)

class Solution {public int strStr(String haystack, String needle) {// kmp实现int[] next = getNext(needle);int j = 0;for (int i = 0; i < haystack.length(); i++) {while (j > 0 && haystack.charAt(i) != needle.charAt(j)) {// 如果不匹配,对模式串进行回退j = next[j - 1];}if (haystack.charAt(i) == needle.charAt(j)){// 如果当前元素匹配,继续匹配下一个元素j++;}if (j == needle.length()){// 如果模式串的所有元素都匹配完了,说明匹配成功,直接返回。// return i + 1 - needle.length();return i - j + 1;}}return -1;}private int[] getNext(String s) {int[] next = new int[s.length()];// 初始化,j指向前缀末尾位置,i指向后缀末尾位置int j = 0;next[0] = 0;for (int i = 1; i < next.length; i++) {// 当前后缀不相同时,前缀末尾进行回退while (j > 0 && s.charAt(i) != s.charAt(j)) {j = next[j - 1];}// 当前后缀相同时,前缀末尾加一if (s.charAt(i) == s.charAt(j)) {j++;}// next数组赋值next[i] = j;}return next;}
}

思路3:字符串哈希。相当于记模板了,贴一下原博客链接。字符串哈希,帮您解决记不住kmp的烦恼~


相关文章:

代码随想录-刷题第九天

28. 找出字符串中第一个匹配项的下标 题目链接&#xff1a;28. 找出字符串中第一个匹配项的下标 思路1&#xff1a;先来写一下暴力解法。 时间复杂度O(n*m) class Solution {public int strStr(String haystack, String needle) {// 暴力解法先来一遍for (int i 0; i <…...

MySQL基本SQL语句(下)

MySQL基本SQL语句&#xff08;下&#xff09; 一、扩展常见的数据类型 1、回顾数据表的创建语法 基本语法&#xff1a; mysql> create table 数据表名称(字段名称1 字段类型 字段约束,字段名称2 字段类型 字段约束,...primary key(主键字段 > 不能为空、必须唯一) ) …...

【洛谷算法题】P5715-三位数排序【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5715-三位数排序【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式…...

上海亚商投顾:北证50指数大涨 逾百只北交所个股涨超10%

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指11月24日震荡调整&#xff0c;深成指、创业板指盘中跌超1%。北证50指数大涨超6%&#xff0c;北交所个股持…...

设计模式—依赖倒置原则(DIP)

1.概念 依赖倒置原则&#xff08;Dependence Inversion Principle&#xff09;是程序要依赖于抽象接口&#xff0c;不要依赖于具体实现。简单的说就是要求对抽象进行编程&#xff0c;不要对实现进行编程&#xff0c;这样就降低了客户与实现模块间的耦合。 通俗的讲&#xff1…...

windows下docker环境搭建与运行实战

背景 学习docker使用&#xff0c;需要环境&#xff0c;今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞&#xff0c;主要是企业内部服务器&#xff0c;都是跟公网隔离的&#xff0c;没有访问公网权限&#xff0c;所以镜像什么的&#xff0c;从公网拉取完全没…...

c# EF框架的增删改查操作

查询 /// <summary>/// 查询/// </summary>private void SQLLoad(){//linq查询&#xff0c;方法一//var UserInfoList from u in db.UserInfo//给个变量u&#xff0c;用来接收查询结果对象//select u;//查询结果对象 //db.UserInfo.Find(1);//依据主键查询,方法二…...

Element-UI Upload 手动上传文件的实现与优化

文章目录 引言第一部分&#xff1a;Element-UI Upload 基本用法1.1 安装 Element-UI1.2 使用 <el-upload> 组件 第二部分&#xff1a;手动上传文件2.1 手动触发上传2.2 手动上传时的文件处理 第三部分&#xff1a;性能优化3.1 并发上传3.2 文件上传限制 结语 &#x1f38…...

持续集成部署-k8s-配置与存储-存储类:动态创建NFS-PV案例

动态创建NFS-PV案例 1. 前置条件2. StorageClass 存储类的概念和使用3. RBAC 配置4. storageClass 配置5. 创建应用&#xff0c;测试 PVC 的自动配置6. 解决 PVC 为 Pending 状态问题7. 单独测试自动创建 PVC 1. 前置条件 这里使用 NFS 存储的方式&#xff0c;来演示动态创建 …...

jar包不挂断地运行命令

nohup java -jar wpfx.jar com.xiaobai.wpfx.WpfxApplication > ./demo.log 2>&1 &这段命令主要是用来在后台运行一个Java应用程序&#xff0c;并将输出日志写入到demo.log文件中。下面是每个参数的解释&#xff1a; nohup&#xff1a;表示不挂断地运行命令&…...

人工智能-优化算法和深度学习

优化和深度学习 对于深度学习问题&#xff0c;我们通常会先定义损失函数。一旦我们有了损失函数&#xff0c;我们就可以使用优化算法来尝试最小化损失。在优化中&#xff0c;损失函数通常被称为优化问题的目标函数。按照传统惯例&#xff0c;大多数优化算法都关注的是最小化。…...

【开源】基于Vue和SpringBoot的食品生产管理系统

项目编号&#xff1a; S 044 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S044&#xff0c;文末获取源码。} 项目编号&#xff1a;S044&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3…...

洛谷P1049装箱问题 ————递归+剪枝+回溯

没没没没没没没没没错&#xff0c;又是一道简单的递归&#xff0c;只不过加了剪枝&#xff0c;我已经不想再多说&#xff0c;这道题写了一开始写了普通深搜&#xff0c;然后tle了一个点&#xff0c;后面改成剪枝&#xff0c;就ac了&#xff0c;虽然数据很水&#xff0c;但是不妨…...

C++通讯录管理系统

目录 系统需求 1、 创建项目 2、 菜单功能设计 3、 退出功能设计 4、 添加联系人功能设计 4.1 设计联系人结构体 4.2 设计通讯录结构体 4.3 在main函数中创建通讯录 4.4 封装添加联系人函数 4.5 添加联系人功能测试 5、 显示联系人功能设计 5.1 封装显示…...

Windows安装Python环境(V3.6)

文章目录 一&#xff1a;进入网址&#xff1a;https://www.python.org/downloads/ 二&#xff1a;执行安装包 默认C盘&#xff0c;选择自定义安装目录 记得勾选add python path 下面文件夹最好不要有 . 等特殊符号 可以创建 python36 如果安装失败Option可以选默认的&#x…...

python 如何调用GPT系列的api接口,实现想要的功能

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 随着各种LLMs (Large Language Models&#xff09;的出现&#xff0c;如何调用各种LLMs的api成为了经常会遇见的问题。 问题解决&#xff1a; 下面仅以生成给定sentence的复述句为例&#xff0c;说明…...

JS动态参数arguments与剩余参数

arguments是函数内部内置的伪数组变量&#xff0c;它包含了调用函数时传入的所以实参 让我为大家介绍一下arguments吧 平时我们获取实参&#xff1a; function fun(a, b) {console.log(a) //1console.log(b) //2}fun(1, 2)接下来我们来使用一下arguments动态获取实参 function …...

使用ListenableFuture进行异步任务执行并进行线程切换

文章目录 一、前言二、关键代码三、参考链接 一、前言 在程序中会经常需要做一些异步任务&#xff0c;但是由于部分操作其实很简单&#xff0c;仅仅是短暂的进行异步操作&#xff0c;然后在结果成功或失败的时候切换回主线程进行下一步处理&#xff0c;这期间不能阻塞主线程。…...

C#,数值计算——插值和外推,RBF_fn 与 RBF_gauss 的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public interface RBF_fn { double rbf(double r); } } ---------------------------------------------- using System; namespace Legalsoft.Truffer { public class RBF_gauss : RBF…...

Java8实战-总结49

Java8实战-总结49 CompletableFuture&#xff1a;组合式异步编程对多个异步任务进行流水线操作构造同步和异步操作将两个 CompletableFuture 对象整合起来&#xff0c;无论它们是否存在依赖 CompletableFuture&#xff1a;组合式异步编程 对多个异步任务进行流水线操作 构造同…...

Delphi中TDictionary的高效应用与实战技巧

1. 为什么TDictionary是Delphi开发者的秘密武器 第一次接触Delphi的TDictionary时&#xff0c;我还在用TStringList处理键值对数据。当时项目里有个需求要缓存5万条用户配置&#xff0c;用TStringList加载要等整整12秒&#xff0c;界面直接卡死。换成TDictionary后&#xff0c;…...

测试架构师成长指南:从执行到设计的跃迁

一、角色本质的认知跃迁&#xff1a;从执行者到设计者在软件质量保障领域&#xff0c;测试架构师代表着测试职业发展的战略制高点。与传统测试工程师相比&#xff0c;其核心差异体现在三个维度&#xff1a;1. 思维模式的根本转变执行者思维聚焦用例执行与缺陷记录&#xff0c;依…...

用ESP32-S3和LVGL做个桌面天气站:从硬件接线到API调用的完整流程

用ESP32-S3和LVGL打造高颜值桌面天气站&#xff1a;从硬件选型到动态UI的全栈指南 在创客圈里&#xff0c;ESP32系列开发板早已成为物联网项目的标配&#xff0c;而S3版本凭借双核240MHz主频、8MB PSRAM和丰富的外设接口&#xff0c;更是将性能提升到了新高度。这次我们要做的&…...

物联网养殖环控系统:科技赋能,推动传统养殖向数字转型

一、方案概述 物联网养殖环控系统&#xff0c;依托物联网、传感器、大数据、无线通信等核心技术&#xff0c;针对畜禽、水产等各类养殖场景&#xff0c;构建“感知-传输-分析-控制-管理”全链路智能闭环&#xff0c;实现养殖环境多参数实时监测、自动精准调控、远程便捷管理&am…...

AI开发-python-langchain框架(--AI 直接生成并执行 Python 代码 )谱

指令替换 项目需求&#xff1a;将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一&#xff0c;测试代码示例 test.c // test.c…...

终极指南:如何高效使用Audio Slicer实现智能音频分割

终极指南&#xff1a;如何高效使用Audio Slicer实现智能音频分割 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 你是否曾为处理长音频文件而烦恼&…...

Artisan烘焙软件:咖啡烘焙师的终极数据可视化与分析平台

Artisan烘焙软件&#xff1a;咖啡烘焙师的终极数据可视化与分析平台 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 在咖啡烘焙的世界里&#xff0c;精确控制烘焙曲线意味着风味的…...

CAGE vs RNA-seq:两种转录组测序技术的深度对比

在选择转录组测序方案时&#xff0c;你是否也在 CAGE 和 RNA-seq 之间犹豫&#xff1f;本文带你深入了解两种技术的核心差异与各自优势。转录组测序是功能基因组学研究的核心技术。在众多技术中&#xff0c;CAGE&#xff08;Cap Analysis of Gene Expression&#xff09;和RNA-…...

把 BAPI、RAP 和 Clean Core 接到一条线上,聊透 BAPI 型 RAP Business Object 的可扩展性

在很多真实项目里,最麻烦的场景从来不是 新建一个 RAP BO,而是手里已经有一套跑了很多年的 BAPI,业务规则、消息处理、权限控制、编号逻辑、过账动作,全都压在里面。业务部门又不想推倒重来,只是希望把它接到 SAP Fiori、OData、RAP 这条现代开发链路上,同时还得满足 Cle…...

一、FunctionCalling——大模型的外部能力接口,实现工具调用与任务执行

Function Calling&#xff08;函数调用&#xff09;是LLM 工程化、AI 智能体的核心基石。 如果大模型是大脑&#xff0c;那 Function Calling 就是让大脑「指挥手脚干活」的标准协议——它规定了大模型如何描述工具、如何输出调用指令、程序如何执行、如何回传结果。一、Functi…...