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

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.lryc.cn/news/257033.html

相关文章:

  • Java UDP 多人聊天室简易版
  • leetcode 100.相同的树
  • 2021年第十届数学建模国际赛小美赛A题气道阻力的评估解题全过程文档及程序
  • 内网环境安装K8S1.20.11版本集群
  • 【前端设计模式】之策略模式
  • JUC包(面试常问)
  • 文字处理工具Word mac软件特点
  • 把 Windows 11 装进移动硬盘:Windows 11 To Go
  • 11、pytest断言预期异常
  • Vue之数据绑定
  • druid在没有web的项目中如何查看监控
  • 游戏被攻击该怎么办?游戏盾该如何使用,游戏盾如何防护攻击
  • 【基于openGauss5.0.0简单使用DBMind】
  • [递归回溯]连接卡片最短路径
  • 初识人工智能,一文读懂强化学习的知识文集(5)
  • 视频封面提取:精准截图,如何从指定时长中提取某一帧图片
  • Shopify 开源 WebAssembly 工具链 Ruvy
  • zxjy008- 项目集成Swagger
  • 使用linux CentOS本地部署SQL Server数据库
  • 理解基于 Hadoop 生态的大数据技术架构
  • 【Go】Go语言基础内容
  • HP-UNIX 系统安全基线 安全加固操作
  • 第九天:信息打点-CDN绕过篇amp;漏洞回链amp;接口探针amp;全网扫描amp;反向邮件
  • 【利用二手车数据进行可视化分析】
  • 快速测试 3节点的redis sentinel集群宕机2个节点以后是否仍能正常使用
  • echarts词云图echarts-wordcloud使用方法
  • 二叉树的OJ练习(二)
  • uni-app 微信小程序之自定义navigationBar顶部导航栏
  • 前端入门:HTML初级指南,网页的简单实现!
  • 低多边形3D建模石头材质纹理贴图