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

建设银行教育网站百度搜索官网

建设银行教育网站,百度搜索官网,dw 动态网站商品页怎么做,wordpress拖拽式布局成败有时,不可丧志,山高路远,愿诸君扶摇直上 —— 24.3.20 找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始&…

成败有时,不可丧志,山高路远,愿诸君扶摇直上

                                                          —— 24.3.20

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

给你两个字符串 haystack 和 needle ,请你在 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
  • haystack 和 needle 仅由小写英文字符组成

方法一 暴力匹配法

思路及算法

我们可以让字符串 needle 与字符串 haystack 的所有长度为 m 的子串均匹配一次。

为了减少不必要的匹配,我们每次匹配失败即立刻停止当前子串的匹配,对下一个子串继续匹配。如果当前子串匹配成功,我们返回当前子串的开始位置即可。如果所有子串都匹配失败,则返回 −1。

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;}
}

方法二 Knuth-Morris-Pratt算法        KMP算法

思路及算法

KMP算法,先求出最长公共前后缀,然后通过KMP算法找出最长子串,然后判断是否存在最长子串,若子串全部都匹配,则返回匹配处的下标

力扣官方题解:

作者:宫水三叶
链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/solutions/575568/shua-chuan-lc-shuang-bai-po-su-jie-fa-km-tb86/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {// KMP 算法// ss: 原串(string)  pp: 匹配串(pattern)public int strStr(String ss, String pp) {if (pp.isEmpty()) return 0;// 分别读取原串和匹配串的长度int n = ss.length(), m = pp.length();// 原串和匹配串前面都加空格,使其下标从 1 开始ss = " " + ss;pp = " " + pp;char[] s = ss.toCharArray();char[] p = pp.toCharArray();// 构建 next 数组,数组长度为匹配串的长度(next 数组是和匹配串相关的)int[] next = new int[m + 1];// 构造过程 i = 2,j = 0 开始,i 小于等于匹配串长度 【构造 i 从 2 开始】for (int i = 2, j = 0; i <= m; i++) {// 匹配不成功的话,j = next(j)while (j > 0 && p[i] != p[j + 1]) j = next[j];// 匹配成功的话,先让 j++if (p[i] == p[j + 1]) j++;// 更新 next[i],结束本次循环,i++next[i] = j;}// 匹配过程,i = 1,j = 0 开始,i 小于等于原串长度 【匹配 i 从 1 开始】for (int i = 1, j = 0; i <= n; i++) {// 匹配不成功 j = next(j)while (j > 0 && s[i] != p[j + 1]) j = next[j];// 匹配成功的话,先让 j++,结束本次循环后 i++if (s[i] == p[j + 1]) j++;// 整一段匹配成功,直接返回下标if (j == m) return i - m;}return -1;}
}

http://www.dtcms.com/wzjs/179952.html

相关文章:

  • 房地产集团网站欣赏江苏seo和网络推广
  • 提升学历东莞网络推广及优化
  • 南通专业做网站公司重庆疫情最新数据
  • 做海外批发有什么好的网站好郴州网站推广
  • 温岭市建设局网站审批公示设计网站都有哪些
  • 上海的网站建设公司哪家好seochinaz查询
  • 武汉光谷企业网站建设查看域名每日ip访问量
  • 做微信网站公司名称百度灰色关键词排名技术
  • 浙江高端网站建设公司优化器
  • 做网站的日文如何在百度推广
  • 广州游戏网站建设今天的热点新闻
  • 今日头条新闻死人新闻seo包年优化
  • 淄博市建设档案馆网站热门关键词查询
  • 做网站找外包公司要要搞清楚什么常用的营销策略
  • wordpress 初始化插件seo深圳培训班
  • 5款免费网站管理系统pc端百度
  • 域名买卖网站2022拉新推广赚钱的app
  • 做网站上传空间什么意思免费推广方法有哪些
  • 礼品做便宜的网站北京网站建设公司
  • 广州哪个公司做网站seo搜索引擎排名优化
  • 过年做啥网站致富培训学校招生营销方案
  • 广州网站备案方案沈阳seo排名外包
  • 学习建设网站桂林网页
  • 淘宝网站开发成本网址和网站的区别
  • 阜阳建设大厦网站网页制作源代码
  • wordpress中怎么排序班级优化大师
  • 泊头市建设局网站百度关键词优化软件怎么样
  • 甜点网站要怎么做百度快照收录入口
  • 图片设计师网站中国万网官网登录
  • 宁波手机网站制作网络营销案例ppt课件