LeetCode力扣每日一题(Java):28、找出字符串中第一个匹配项的下标
别问我为什么今天做了两题,问就是我干概率论干废了,需要换换脑子想想不同类型的问题,所以来刷刷算法
一、题目

二、解题思路
1、我的思路
其实这题思路还挺简单的,我直接把代码放这,大家应该稍微看看就能懂
char[] ch = haystack.toCharArray();char[] cn = needle.toCharArray();for (int i = 0; i < ch.length; i++) {if(ch[i] == cn[0]){int flag = 1;for(int j=1;j<cn.length;j++){if(i+j > ch.length - 1 || ch[i+j] != cn[j]){flag = 0;break;}}if(flag == 1){return i;}}}return -1;
值得注意的是,需要考虑到下图出现的特殊情况,我一开始就没考虑

2、官方题解
方法一:暴力匹配
这种算法思路和我的思路是一样的,只是我的flag用的是int类型,题解中用的是boolean类型,这是之前刷C语言留下来的后遗症……可恶,我以后也要养成习惯用boolean类型
class Solution {public int strStr(String haystack, String needle) {int n = haystack.length(), m = needle.length();for (int i = 0; i + m <= n; i++) {boolean flag = true;for (int j = 0; j < m; j++) {if (haystack.charAt(i + j) != needle.charAt(j)) {flag = false;break;}}if (flag) {return i;}}return -1;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法二:Knuth-Morris-Pratt算法
一个我听都没听过的算法,这种方法在力扣上的说明文字非常非常长,我我我偷个懒就直接放代码了,嘻嘻
class Solution {public int strStr(String haystack, String needle) {int n = haystack.length(), m = needle.length();if (m == 0) {return 0;}int[] pi = new int[m];for (int i = 1, j = 0; i < m; i++) {while (j > 0 && needle.charAt(i) != needle.charAt(j)) {j = pi[j - 1];}if (needle.charAt(i) == needle.charAt(j)) {j++;}pi[i] = j;}for (int i = 0, j = 0; i < n; i++) {while (j > 0 && haystack.charAt(i) != needle.charAt(j)) {j = pi[j - 1];}if (haystack.charAt(i) == needle.charAt(j)) {j++;}if (j == m) {return i - m + 1;}}return -1;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:
LeetCode力扣每日一题(Java):28、找出字符串中第一个匹配项的下标
别问我为什么今天做了两题,问就是我干概率论干废了,需要换换脑子想想不同类型的问题,所以来刷刷算法 一、题目 二、解题思路 1、我的思路 其实这题思路还挺简单的,我直接把代码放这,大家应该稍微看看就能懂 char[]…...
Java UDP 多人聊天室简易版
服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…...
leetcode 100.相同的树
涉及到递归,最好多画图理解,希望对你们有帮助 100.相同的树 题目 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 题目链接…...
2021年第十届数学建模国际赛小美赛A题气道阻力的评估解题全过程文档及程序
2021年第十届数学建模国际赛小美赛 A题 气道阻力的评估 原题再现: 气道阻力的定义是通过肺气道产生单位气流所需的经肺压力的变化。更简单地说,它是嘴和肺泡之间的压力差,除以气流。影响气道阻力的因素是多方面的,我们需要探讨这…...
内网环境安装K8S1.20.11版本集群
目录 第一章.实验要求和环境 1.1.实验要求 1.2.实验环境 1.3.依赖关系处理 第二章.K8S的安装过程 2.1.初始化到集群安装成功 ------------------------------ 环境准备 ------------------------------ docker安装好了后 2.2.安装K8组件 -------------------- 部署K8…...
【前端设计模式】之策略模式
概述 在前端开发中,我们经常会遇到需要根据不同的条件或情况来执行不同的算法或行为的情况。这时,策略模式就能派上用场。策略模式是一种行为型设计模式,它将不同的算法封装成独立的策略对象,使得这些算法可以互相替换࿰…...
JUC包(面试常问)
1. Callable接口 类似于Runnable接口,Runnable描述的任务,不带返回值;Callable描述的任务带返回值。 public class Test {//创建线程,计算12...1000public static void main(String[] args) throws ExecutionException, Interru…...
文字处理工具Word mac软件特点
Microsoft Word mac是一款文字处理软件。它是 Microsoft office 套件的一部分,已广泛用于创建、编辑和格式化文本文档。 Word mac软件特点 改进的协作工具:使用 Microsoft Word 2021,多个用户可以同时处理一个文档,从而更轻松地与…...
把 Windows 11 装进移动硬盘:Windows 11 To Go
本篇文章聊聊如何制作一个可以“说带走就带走”的 Windows 操作系统,将 Windows11 做成能够放在 U 盘或者移动硬盘里的 WinToGo “绿色软件”。 写在前面 在《开源的全能维护 U 盘工具:Ventoy》这篇文章的最后,我提到了一个关键词 “WinToG…...
11、pytest断言预期异常
官方用例 # content of test_exception_zero.py import pytestdef test_zero_division():with pytest.raises(ZeroDivisionError):1/0# content of test_exception_runtimeerror.py import pytestdef test_recursion_depth():with pytest.raises(RuntimeError) as excinfo:def…...
Vue之数据绑定
在我们Vue当中有两种数据绑定的方法 1.单向绑定 2.双向绑定 让我为大家介绍一下吧! 1、单向绑定(v-bind) 数据只能从data流向页面 举个例子: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…...
druid在没有web的项目中如何查看监控
(1)在这个网址下载druidStat.bat文件https://github.com/alibaba/druid/blob/master/core/src/main/scripts/druidStat.bat druidStat.bat文件内容如下: echo offset _RUNJAVA"%JAVA_HOME%\bin\java.exe" set _TOOLSJAR"%JA…...
游戏被攻击该怎么办?游戏盾该如何使用,游戏盾如何防护攻击
随着Internet互联网络带宽的增加和多种DDOS黑客工具的不断发布,DDOS拒绝服务攻击的实施越来越容易,DDOS攻击事件正在成上升趋势。出于商业竞争、打击报复和网络敲诈等多种因素,导致很多商业站点、游戏服务器、聊天网络等网络服务商长期以来一…...
【基于openGauss5.0.0简单使用DBMind】
基于openGauss5.0.0简单使用DBMind 一、环境说明二、初始化tpch测试数据三、使用DBMind索引推荐功能四、使用DBMind实现SQL优化功能 一、环境说明 虚拟机:virtualbox操作系统:openEuler 20.03 TLS数据库:openGauss-5.0.0DBMind:d…...
[递归回溯]连接卡片最短路径
小游戏 题目描述 一天早上,你起床的时候想:“我编程序这么牛,为什么不能靠这个挣点银子呢?”因此你决定编写一个小游戏。 游戏在一个分割成w * h个长方格子的矩形板上进行。如图所示,每个长方格子上可以有一张游戏…...
初识人工智能,一文读懂强化学习的知识文集(5)
🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…...
视频封面提取:精准截图,如何从指定时长中提取某一帧图片
在视频制作和分享过程中,一个有吸引力的封面或截图往往能吸引更多的观众点击观看。有时候要在特定的时间段内从视频中提取一帧作为封面或截图。如果每个视频都手动提取的话就会耗费很长时间,那么如何智化能批量提取呢?现在一起来看下云炫AI智…...
Shopify 开源 WebAssembly 工具链 Ruvy
最近,Spotify 开源了Ruvy,一个 WebAssembly 工具链,能够将 Ruby 代码转换为 Wasm 模块。Ruvy 基于ruby.wasm, 用 Rust 实现,提升了性能并简化了 Wasm 模块的执行。 Ruvy 利用了ruby.wasm提供的 Ruby 解释器模块,并使用wasi-vfs (WASI 虚拟文件系统)将其与所有指定的 Rub…...
zxjy008- 项目集成Swagger
Swagger可以生成在线文档,还可以进行接口测试。 1、创建common模块(maven类型) 为了让所有的微服务子子模块都可以使用,可以在guli_parent父工程下面创建公共模块 1.1 在guli_parent父工程下面创建公共模块 配置: groupId:com…...
使用linux CentOS本地部署SQL Server数据库
🌈个人主页:聆风吟 🔥系列专栏:数据结构、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 安装sql server二. 局域网测试连接三. 安装cpolar内网穿透四. 将sqlserver映射…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...
