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

福州网站开发培训南昌定制网站开发

福州网站开发培训,南昌定制网站开发,信息系统的网站开发答辩问题,网站诊断博客KMP算法详解 1 KMP算法解决的问题 2 前缀问题 3 KMP 算法 1 KMP算法解决的问题 字符串str1和str2,str1是否包含str2,如果包含返回str2在str1中开始的位置。并做到时间复杂度为 O ( n ) O(n) O(n) 2 前缀问题 求一个字符串中每个字符前缀和后缀相…

KMP算法详解

  • 1 KMP算法解决的问题
  • 2 前缀问题
  • 3 KMP 算法

 

1 KMP算法解决的问题

字符串str1和str2,str1是否包含str2,如果包含返回str2在str1中开始的位置。并做到时间复杂度为 O ( n ) O(n) O(n)


 

2 前缀问题

求一个字符串中每个字符前缀和后缀相等的最大长度
比如求字符串 :
a b b a a b b a b b a a b b a k l

假设此时来到的位置为 i

求解方法如下:
先看i - 1 位置的 前缀和后缀相等的最大长度 CN ;

比较 CN 位置和 i - 1位置的字符串是否相等,如果相等,则i位置的前缀和后缀相等的最大长度为 CN + 1;

如果不相等,得到 CN位置的前缀和后缀相等的最大长度CN,继续用CN位置的字符和 i - 1位置的字符比较

循环上述过程,碰到CN为0,则i位置的 前缀和后缀相等的最大长度为0

比如求字符串
a b b a a b b a b b a a b b c k l k字符的前缀和后缀相等的最大长度过程如下 :
k所在的位置 15,前一个位置的字符为 c 字符c 前缀和后缀相等的最大长度cn 为7,
则比较字符串中 7 位置 a15 -1 位置的字符 a 相等,则直接返回 8

获取一个字符串中所有字符前缀和后缀相等的最大长度代码实现

coding

/**** @param m 获取字符数组m每一个位置 前缀和后缀相等的最大长度* @return*/public static int[] getNextArr(char[] m){if (m.length == 1){return new int[]{-1};}int[] retArr = new int[m.length];// 规定 0 位置 前缀和后缀相等的最大长度为 -1// 规定 1 位置 前缀和后缀相等的最大长度为 0retArr[0] = -1;retArr[1] = 0;// 使用字符数组中那个位置的字符与 i - 1 位置的字符进行比较int cmpIndex = 0; // i - 1位置的字符前缀和后缀相等的最大长度// i在2位置时,使用i - 1位置的,即 1位置的字符前缀和后缀相等的最大长度// 初始时,使用 0 位置的字符和1位置的字符比较int i = 2;while (i < m.length){// cmpIndex位置字符和i位置的字符相等 // 则i位置的前缀和后缀相等的最大长度为cmpIndex+1if (m[cmpIndex] == m[i - 1]){retArr[i++] = ++cmpIndex;} else if (cmpIndex > 0){cmpIndex = retArr[cmpIndex];} else {retArr[i++] = 0;}}return retArr;}

3 KMP 算法

coding

/*** KMP算法解决的问题* 字符串str1和str2,str1是否包含str2,如果包含返回str2在str1中开始的位置。* 如何做到时间复杂度O(N)完成?* 字符串1的长度是M* 字符串的长度是N* 暴力匹配的时间复杂度O(M * N)* 前缀和后缀相等的最大长度* 前缀和后缀不能取到整体**/public static int getIndex(String s1,String s2){if (s1 == null || s2 == null || s2.length() < 1 || s2.length() > s1.length()){return -1;}char[] str1 = s1.toCharArray();char[] str2 = s2.toCharArray();int[] nextArr = getNextArr(str2);int i1 = 0;int i2 = 0;while (i1 < str1.length && i2 < str2.length){if (str1[i1] == str2[i2]){i1++;i2++;} else if (nextArr[i2] == -1){//第一个字符i1 ++;} else {// i2直接到 i2位置前缀和后缀相等最大长度的位置i2 = nextArr[i2];}}// 只有 i1 == str2.length时才匹配成功 否则str2就不在str1中return i2 == str2.length ? i1 - i2 : -1;}
http://www.yayakq.cn/news/933449/

相关文章:

  • 怎样做微信网站云南网站建设效果好吗
  • 网页传奇176金融网站排名优化
  • 网站开发运行环境有哪些打开网站不要出现 index.html
  • python做网站的好处眼镜网站源码
  • 设计软件ai网站建设备案优化之看
  • 龙岗外贸网站建设公司价格乾县交通建设网站
  • 成都做小程序的开发公司轻松seo优化排名 快排
  • 男的做直播哪个网站上海加盟网站建设
  • 如何建立公司的销售网站怎么做自己地网站
  • 厚街网站仿做定制开发app的注意事项
  • 做搜狗pc网站seo优化方案书
  • 东莞网站推广及优化可以做公众号封面图的网站
  • 十大免费剪辑软件下载网站是怎么做优化
  • 为网站开发app怎么做网页的二维码
  • 分销网站建立wordpress中文免费企业主题下载
  • 个人网站备案名字不同哪个网站可以找到毕业设计
  • 句容建设局网站招标WordPress添加下载弹窗
  • 北京企业官网建站wordpress能做跨境电商
  • 技术支持广州骏域网站建设专家北京建设部网站官网
  • 重庆市网站建设百度商桥怎么嵌入网站
  • 个人网站怎么盈利企业seo优化
  • 云主机建网站教程wordpress 主题推荐
  • 佛山找人做网站白度指数
  • 旅游景区网站模板华为公司电子商务网站建设策划书
  • 如何用网站做推广成都城乡建设网站
  • iis6.0新发布网站访问速度慢手机百度网址是什么
  • 网站建设个人接单个人 可以做社交网站
  • 电脑小游戏网站自助网站建设工具
  • 上虞做网站公司百度经验首页官网
  • 网站开发包括哪些工作wordpress删除媒体库功能