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

北京seo推广系统合肥seo推广排名

北京seo推广系统,合肥seo推广排名,扬州建设集团招聘信息网站,福安城乡建设与规划局网站找出字符中第一个匹配的下标 题目描述 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1&#…

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

题目描述

给你两个字符串 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 。

解题思路 

暴力匹配算法。其基本思想是,从 haystack 中的每个字符位置开始,与 needle 字符串逐个进行比较,如果发现不匹配就继续移动 haystack,直到找到匹配项或搜索结束。

public int strStr(String haystack, String needle) {int m = haystack.length();int n = needle.length();if (n == 0) return 0; // 空字符串特殊处理for (int i = 0; i <= m - n; i++) {int j = 0;while (j < n && haystack.charAt(i + j) == needle.charAt(j)) {j++;}if (j == n) return i; // 匹配成功}return -1; // 未找到匹配项
}

这种方法的时间复杂度是 O(m * n),其中 m 是 haystack 的长度,n 是 needle 的长度。当 needle 很短而 haystack 很长时,这种方法的效率会变得低下。因此,为了提高效率,可以使用 KMP 算法。 

KMP 算法简介 

KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,它通过部分匹配表(又称为前缀表)来加快匹配过程,避免重复检查已经匹配过的字符。 

KMP 算法原理 

KMP 的核心思想是在匹配过程中,如果发现了不匹配字符,算法会利用之前已经匹配过的字符信息,移动 needle 字符串,而不是从头开始匹配。这是通过构建部分匹配表(前缀表)来实现的。

部分匹配表存储了每个位置之前的最长相同前后缀长度。例如: 对于 needle = "abcab",其部分匹配表为 [0, 0, 0, 1, 2]

  • 第一个字符 a 没有前后缀,因此为 0。
  • ab 没有相同的前后缀,因此为 0。
  • abc 也没有相同前后缀,为 0。
  • abca 的前缀 a 和后缀 a 匹配,为 1。
  • abcab 的前缀 ab 和后缀 ab 匹配,为 2。

KMP 算法步骤 

  • 构建部分匹配表(前缀表):根据 needle 构造出每个位置的最长相同前后缀长度。
  • 使用部分匹配表进行匹配:在主串中逐步匹配子串,当发生不匹配时,利用部分匹配表快速跳过不必要的比较。

KMP 算法实现 

public class Solution {public int strStr(String haystack, String needle) {if (needle.isEmpty()) return 0;int[] lps = computeLPSArray(needle);int i = 0, j = 0; // i 是 haystack 的索引,j 是 needle 的索引while (i < haystack.length()) {if (haystack.charAt(i) == needle.charAt(j)) {i++;j++;}if (j == needle.length()) {return i - j; // 找到匹配项,返回下标} else if (i < haystack.length() && haystack.charAt(i) != needle.charAt(j)) {if (j != 0) {j = lps[j - 1]; // 使用部分匹配表跳过重复比较} else {i++;}}}return -1; // 未找到匹配项}// 构造部分匹配表private int[] computeLPSArray(String needle) {int[] lps = new int[needle.length()];int length = 0;int i = 1;while (i < needle.length()) {if (needle.charAt(i) == needle.charAt(length)) {length++;lps[i] = length;i++;} else {if (length != 0) {length = lps[length - 1];} else {lps[i] = 0;i++;}}}return lps;}
}

复杂度分析

KMP 算法的时间复杂度为 O(m + n),其中 m 是 haystack 的长度,n 是 needle 的长度。相比于暴力匹配算法,KMP 通过部分匹配表有效减少了字符的重复比较,显著提升了效率。

 

 

 

http://www.yayakq.cn/news/257040/

相关文章:

  • 南京自助建站网站wordpress留言页
  • 成都市网站设服务范围 网站建设公司
  • 电子商务网站建设的意义是什么wordpress架设教程视频
  • 互利互通网站建设漳州做网站含博大网
  • 网站关键词长度1元购买域名
  • 鲅鱼圈网站怎么做哈尔滨最新
  • 建设网站的方法wordpress模板分享
  • 建筑毕业设计代做网站响应适网站开发
  • 石家庄中小企业网站制作苏州百度首页优化
  • 优惠券网站建设制作中国航天空间站最新消息
  • 长宁区网站建设开外贸网站平台
  • 深圳福田商城网站建设网上购物网站设计
  • 购物网站app开发网站首页标题字数
  • 上海网站建设找缘魁官网模板免费下载
  • 用django做网站鞍山市网站建设
  • 成都专门做网站的公司江苏无锡网站推广及优化
  • 沈阳城市建设学院官网网站上海哪里做网站
  • 点击运行显示网站正在建设wordpress不显示中文图片不显示
  • 下载汽车网站制作网站厦门旅游网站建设目的
  • 网站都是程序员做的吗重庆设计公司有哪些
  • 长春火车站附近美食吉安手机网站建设
  • 表白视频制作网站最好的优化是什么
  • 淘宝网站都是怎么做的微商城小程序哪个好
  • 如何开展网站建设百度网盘app下载安装电脑版
  • 摄影网站源码 国外企业文化有哪些
  • 崇州市微信端网站建app下载安装app
  • 网站架构图用什么画图书馆网络规划与设计
  • 省级别网站建设方案怎么开拼多多网店步骤
  • 做简单的网站链接个人微信营销
  • 招聘网站开发程序员正邦logo设计