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

dede网站地图html/微营销平台

dede网站地图html,微营销平台,网站建设宣传党建,wordpress 怎么手动更新题目 KMP算法,如题目所示,主要解决快速匹配的问题。但是这个不是重点,这个算法主要是解决,在一次匹配不成功的情况下,如何快速找到下一个匹配点。 如何找到下一个匹配点? 当然是前面有几个字符相同&#…

题目在这里插入图片描述
KMP算法,如题目所示,主要解决快速匹配的问题。但是这个不是重点,这个算法主要是解决,在一次匹配不成功的情况下,如何快速找到下一个匹配点

如何找到下一个匹配点?

当然是前面有几个字符相同,那我继续对比下一个位置的字符不就行了吗?

真的就是这么简单!

那前面有几个字符相同啊?每个位置不同,每个位置前面的字符都不一样啊!

那就必须记录下来了,所以我们必须会开一个数组来记录每个位置,后缀最长有几个字符跟前缀相同。这算是用空间去换时间了。

什么是后缀,什么是前缀??

在这里插入图片描述

前缀:就是从左边开始,连续的子字符串,就是一个字符串的前缀。

后缀:就是从某处开始,直到最后的连续的子字符串,就是一个字符串的后缀。

我们没必要纠结为什么左边叫前,右边的叫后,这个没啥意义,习惯而已。

我们需要知道,一个字符串,它的前缀跟后缀如果相同的话,最长的长度是多少。
在这里插入图片描述
我们可以理解为,这个字符串的后面几位跟这个字符串的前面几位,一模一样

在这里插入图片描述
我们已经知道,这个6个长度的字符串的前后缀最大匹配长度是3了。

现在求这个7个长度的字符串的前后缀匹配长度。

在这里插入图片描述
啊,是相同的啊,那皆大欢喜,就在长度为6的字符串的结果的基础上+1就完事了。

但是新加的这个字符,跟长度为6的值的后续那个字符不相同咋办?那就无法使用长度为6的那个值(3)了
在这里插入图片描述
意思就是,在这个长度为7的字符串里,前缀跟后缀最长的匹配长度不可能为4了。也不可能比4大,如果比4大的话,那长度为6的字符串的前缀跟后缀最长的匹配长度要比3大了。

在这里插入图片描述
这个实际就是在求
在这里插入图片描述
很遗憾,我们可以看出来,长度为3的字符串的前缀与后缀最长的匹配长度为0,那这个新加的下标为6的字符,只能跟下标为0的字符进行比较了(从头开始比),ok,比较结果是不相等,那么长度为7的字符串的前缀与后缀最长的匹配长度为0

我们为什么要求前缀与后缀最长的匹配长度这么拗口的变量啊,因为这个值就是下一个字符进行比较的跳跃点啊!

比如我们知道长度为3的字符串,前缀与后缀最长的匹配长度为0,我们就不必再去比较长度为2的字符串,长度为1的字符串是否能跟下标为6的这个字符连起来。而是直接比较下标为0的字符。

class Solution {public int strStr(String haystack, String needle) {if (needle.isEmpty()) return 0;// 分别读取原串和匹配串的长度int n = haystack.length(), m = needle.length();// 原串和匹配串前面都加空格,使其下标从 1 开始// 构建 next 数组,下标为从原串起始位置开始的子串长度,值为该子串的前缀与后缀匹配的最长值int[] next = new int[m+1];//i为子串的长度// 构造过程 i = 2,j = 0 开始,i 小于等于匹配串长度int i=2;int j=0;while(i<=needle.length()){while(j>0&&needle.charAt(i-1)!=needle.charAt(j)){j=next[j];}if(needle.charAt(i-1)==needle.charAt(j)){j=j+1;}next[i]=j;i=i+1;}//至此,求得已知子串的最长匹配值,已经求得所有的跳跃点//System.out.println(Arrays.toString(next));int equal_count=0;//开始进行匹配for(int k=0;k<haystack.length();k++){while (equal_count>0&&haystack.charAt(k)!=needle.charAt(equal_count)){equal_count=next[equal_count];}if(haystack.charAt(k)!=needle.charAt(equal_count)){equal_count=0;} else {equal_count=equal_count+1;}if(equal_count==needle.length()){return k-needle.length()+1;}}return -1;}
}
http://www.jmfq.cn/news/4993345.html

相关文章:

  • 湖南省建设厅城乡建设网站/学开网店哪个培训机构好正规
  • 做电影资源网站手机版/win7优化大师下载
  • 祥云网站建设/内蒙古网站seo
  • 哪个网站亲子游做的好/自动的网站设计制作
  • 商城网站开发项目描述/seo网络优化师招聘
  • 重庆做网站建设公司哪家好/搜索引擎是什么意思啊
  • wordpress首页获取文章的图片/网站建设优化的技巧
  • 做盗版小说网站犯法吗/怎么优化一个网站关键词
  • 管理公司网站建设/网络营销公司经营范围
  • 网站 icp备案/预防电信网络诈骗
  • 电脑课做网站所需的软件/百度推广关键词排名规则
  • 连云港建设网站/百度首页广告
  • wordpress后台加载速度慢/seo站长平台
  • wordpress站点logo设置/在哪里找软件开发公司
  • 临沂网站排名优化/app推广方案怎么写
  • 深圳市建设行业主管部门官方网站/百度竞价冷门产品
  • 官方网站建设专业公司/网站维护的主要内容
  • 贵阳网站设计多少钱/百度一下下载
  • 个人可以做电视台网站吗/社区营销推广活动方案
  • 网站图标用代码代替/百度推广电话客服
  • 济宁网站建设哪家好/近两年成功的网络营销案例及分析
  • 网站制作自己做/推广策划
  • 技术先进的网站建设/新浪体育世界杯
  • 做电影网站用什么格式好/进入百度首页
  • 贵阳网站建设有限公司/百度电脑版网址
  • 网站开发技术概述/站长之家站长工具
  • 重庆企业网站建设报价/app营销策略有哪些
  • 哪个浏览器能打开那种网站/做搜索引擎优化的企业
  • web前端工程师工资一般多少/罗湖区seo排名
  • 郑州网站优化培训机构/seo品牌推广方法