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

广州网站设计公司招聘泉州百度竞价公司

广州网站设计公司招聘,泉州百度竞价公司,wordpress会员制,网站开发合同 下载知识总览: 什么是字符串的模式匹配: 主串:想从该串获取结果的串 模式串:想搜索的内容,不一定在主串中能搜到,子串一定能在主串中搜到 字符串模式匹配:在主串找模式串并返回找到的第一个模式串…

知识总览:

什么是字符串的模式匹配:

主串:想从该串获取结果的串

模式串:想搜索的内容,不一定在主串中能搜到,子串一定能在主串中搜到

字符串模式匹配:在主串找模式串并返回找到的第一个模式串所在位置

 朴素模式匹配算法:

暴力匹配,从主串选取跟模式串长度一样的子串去跟模式串对比,俩串相等返回首字符下标,俩串不相等继续找,直到找到为止返回首字符下标或者找完也找不到为止。

实现方法1:Index()函数定位操作

跟上一节找主串的子串函数一样

注意目前的串都是用的静态数组且是数组第一个字符位置不适用的形式,即数组存储字符的下标跟字符位序相同,且找模式串可寻找的次数为n-m+1(n为主串,m为模式串)

实现方法2:不用Index()函数定位,使用指针

 第一轮:

设置2个扫描指针,分别扫描主串和模式串,指针指到哪则2个串的字符比较到哪,开始i和j分别指向主串S和模式串T的下标为1的第一个字符,分别为a和a即相等,则俩指针后移指向下标为2的第2个字符,都为b继续后移,来指针都指向第3个字符a都相等,继续后移指向第4个字符a相等,继续后移指向第5个字符都为b相等,继续后移此时俩指针都指向第6个字符,i指向主串S的a,j指向模式串的T的c,则俩字符不相等,指向主串的指针i回到指向下一个子串的第一个位置,即主串S的第2个字符位置,指向模式串的指针j回到模式串的第一个位置

i=i-j+2;//即此时i=6,j=6,下一轮i=i-j+2=2

//俩指向字符不相等时,j当前的值表示匹配到了子串的第几个字符,i-j就可以让i的值回到目前这个子串的前边一个位置,i和j都是统一往前移的,因为指针i要指向下一个子串的第一个位置,所以要在此基础上+2,如下图现在j指向了当前子串的第6个字符,i=6,j=6,i=i-j=0即i回到了这个子串的前边一个位置(注意是当前子串的前边一个位置,不是当前子串的第一个位置,这意味着要指向下一个子串的第一个位置要+2,因为+1就又指向当前子串的第一个位置了),然后还要刨除这个子串的第一个位置指向下一个字串的第一个位置,则要i=i+2=2

j=1;//即此时j=6,下一轮j=1,j指向模式串起始位置

第2轮: 

i的值恢复为2即i==2,j的值恢复为1即j==1,俩指针指向的值为b和a不相等,即i指向的当前子串和模式串不相等,则i=i-j=2-1=1即i回到当前子串b的前一个位置,i=i+2=3为指向下一个子串的第一个位置,指向模式串T的指针j回到模式串第一个位置即j==1

i=i-j+2;//即此时i=2,j=1,下一轮i=i-j+2=2-1+2=3

j=1;//即此时j=6,下一轮j=1,j指向模式串起始位置

 

第3轮:

上同,i从第3个字符开始的子串和j=1开始的模式串比较,每当发现i和j所指的字符相同的时候,让i和j分别+1,当i==4,j==2时不相等,i回到下一个子串的第一个位置,j回到起始位置

i=i-j+2;//即此时i=4,j=2,下一轮i=i-j+2=4-2+2=4

j=1;//即此时j=2,下一轮j=1,j指向模式串起始位置

 

第4轮:

每当发现i和j所指的字符相同的时候,让i和j分别+1,当j所指的位置超出了模式串的长度,就说明匹配成功,则返回当前子串的第一个字符位置即让i-j即可,注意没有+1,因为在匹配成功的时候i和j都已经往前移动了1个位置,所以当i-j的时候其实指向的位置为当前子串的第一个字符位置

 

代码版:

2个指针i和j,i指向主串,j指向模式串,初始值都为1即指向主串和模式串的第一个字符,如下while循环

if(S.ch[i]==T.ch[j]); ++i;++j;即当前2个指针指向的字符相等,让i和j都+1

i=i-j+2;j=1;即当前2个指针指向的字符不相等则让i回到下一个子串的第一个字符位置,j回到模式串第1个位置

return i-T.length;如果匹配成功,则说明j>T.length,已跳出while循环

return 0;;即匹配失败,即i已经把整个主串走了一遍,即在走到主串的最后一个字符时,不相等,i的下一轮下标为S.length+1(我怎么感觉S.length要比实际的字符个数多1个,因为S数组中存储的第一个位置没有存元素啊,比说最后一个字符index=3,实际S.length=4吧,那下一个位置i不就是4吗,那这个while循环不是还能走一遍吗,但是走的话if第一个语句就数组下标越界了吧。。。。。。。。。。。。。。。。)

 

最坏时间复杂度:

假如有如下长度为n的主串,长度为m的模式串,子串和模式串匹配的时候每次只有最后一个字符不相等,且主串n只有在最后一个m长度的子串中才和模式串匹配,即要总共匹配n-m+1次,每次都要匹配m个长度,则时间开销为(n-m+1)m=nm-m²+m,即时间开销为O(nm),因为一般n>>m,所以把m²舍去

 

 知识回顾:

。。。。。。。。。。。。。。。 

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

相关文章:

  • 宁波网站开发制作网站seo外包靠谱吗
  • 网站联盟广告名词解释网站链接推广工具
  • 网站后台密码文件厦门seo培训学校
  • 制作网站公司首 荐乐云seo专家有哪些免费推广网站
  • 加急网站备案万网域名注册教程
  • 企业品牌推广网站国外十大免费服务器和域名
  • 重新建设网站的申请报告网络营销策划书
  • WordPress360收录网站关键词优化排名外包
  • 网站建设和网站优化哪个更重要宝鸡百度seo
  • 滕州建网站哪家好二次感染即将大爆发
  • 佛山做网站哪家好b站视频推广app
  • 大连本地网湖南企业seo优化首选
  • 深圳专业做网站排名哪家好招商外包公司
  • 《jsp动态网站开发》百度官网首页登陆
  • 查询网站开发网站建设详细方案模板
  • 做盗版视频网站违法吗西安今日头条新闻消息
  • 应用市场appseo与sem的区别和联系
  • 小草网络 网站建设焊工培训心得体会
  • wordpress 自定义侧边栏需要优化的地方
  • WordPress主题增加说说页面宁波seo优化流程
  • 做网站需要到什么技术优秀营销软文范例800字
  • 鹿泉营销型网站制作价格低百度电脑版官网下载
  • 长沙公司网站建设教育培训机构排名
  • 网站建设禁止谷歌收录的办法郑州推广优化公司
  • 郑州大型网站建设南昌网站优化公司
  • 开一家代做网站的公司搜索引擎竞价广告
  • 网站做前端网络营销方式有哪几种
  • DW做旅游网站毕业设计地推任务网
  • 网站建设项目特色谷歌推广教程
  • 网站开发方面知识微信朋友圈广告怎么推广