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

查询建设用地规划许可证在哪个网站公司建设网站申请报告范文

查询建设用地规划许可证在哪个网站,公司建设网站申请报告范文,怎么做地下彩票网站,网站开发能干什么思路: 朴素匹配有很多步骤是多余的 KMP算法能够避免重复匹配 KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 这里讲一下为什么用模式串的最大公共前后缀…

思路:

朴素匹配有很多步骤是多余的

KMP算法能够避免重复匹配

KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。

这里讲一下为什么用模式串的最大公共前后缀求解NEXT数组,参考B站木子喵NEKO的视频【【neko算法课】KMP算法【7期】】 https://www.bilibili.com/video/BV1234y1y7pm/?share_source=copy_web&vd_source=5fc45b3a16cefaa9c36d42d5626cd9e6

用例子思考时,我们可以肉眼看到,需要移动的位置是根据B向后移动几个可以最大化的对齐A(在i之前),意味着找到i前面文本子串(A)与模式子串(B)中重合的部分。

既然i前面都是重合(因为i这里发生了不匹配,前面都匹配),直白说就是一样的,那就不用看文本串了,直接看模式串前后是否有重合的部分,也就是看模式串的最大公共前后缀。如果没看懂可以往下看。


kmp整体上分两步

1计算前缀表

2根据前缀表移动两个指针进行匹配

1计算前缀表,就是求解文本串指针回退的位置,

ps:文本串用i指针,模式串用j指针,

以下分别用A,B代指文本串与模式串。

A串中i指针前面(第一次循环时AB发生不匹配的位置)前,用A子串与B子串代称。

当A,B遇到不匹配的字符时,j指针回退,回退依据是当前不匹配位置前一位最大前后缀的长度,

为什么呢?通俗的说就是,不匹配了,看前面有哪些已经最大化的匹配上了,不匹配位置前一位的next值,代表了B自身前后一致的最大长度,根据前面讲的,A子串等效B子串,也就代表了AB子串前后一致的最大长度,也就代表了A子串的后面与B子串的前面一致的最大长度,也就是B需要向后移动几个字符,而j指针的移动代表着B向后移动,也就是j指针要移动到的位置。

j回退到上次最大化匹配的位置

如果还不匹配,再次查看不匹配位置前一位next的值。

如果匹配,j加一,也就意味着j向后移动一位,i向后移动写在了for循环里。

同时每次更新next[i]

void getNext(string s,vector<int> &next)
{int j = 0;next[0] = 0;for(int i = 1;i<s.size();i++){while(j>0 && s[i] != s[j]) j = next[j-1];if(s[i] == s[j]) j++;next[i] = j;}
}

2 模拟匹配过程

如果不匹配,按着next数组回退j指针,如果匹配,J增一

最后如果j指向了模式串的末尾,说明找到了完整匹配,返回匹配的起始下标

如果没找到返回-1

int strStr(string s,string t)
{if(t.size()==0) return 0;//这里需要初始化next数组,这里用址传递传参给getNext函数vector<int> next(t.size());getNext(t,next);int j = 0;for(int i = 0;i<s.size();i++){
//若果遇到s,t不匹配,按着next表回退while(j>0 && s[i]!=t[j]) j = next[j-1];if(s[i] == t[j]) j++;
//如果j指向t的最后一位,说明前面均匹配成功,那么返回的第一个匹配项是当前i位置减去已经匹配的t的长度,再加一if(j == t.size()) return (i - t.size()+1);}return -1;
}

注:修改了一处传参遇到的问题,涉及值传递、指针传递与地址传递的比较,可以略过。

void getNext(string s,vector<int> &next)

 vector<int> next(t.size());
    getNext(t,next);

这里string s是值传递,也可以用地址传递

vector<int> &next,必须用地址传递,这样好处相比于值传递与指针传递有三点

1避免不必要的拷贝,调用函数时不用创建next的副本,不会导致额外的时间内存开销

2保持函数接口整洁,引用传递可以直接修改传入的对象,不需要显示的管理内存。

3避免空指针问题,指针传递需要检查指针是否为空,否则运行错误,引用传递无需担心,因为引用会绑定到有效的对象。

因此地址传递是c++中处理复杂参数中常见于推荐的方法。

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

相关文章:

  • 网站页面可以用什么框架做济南做网站价格
  • 制作网站一般多少钱昌做网站
  • 赣州人才网最新招聘信息石家庄关键词搜索引擎优化
  • 门户网站开发费怎做账wordpress 页面编辑器
  • 注册网站好的平台网上怎么找工作的平台
  • 如何在服务器上做网站软文代发平台
  • 网站错误模板东莞做小程序的公司
  • 网站推广的方法搜索引擎建设通官网app下载
  • 网站模板炫酷搜狗网页
  • 平面设计国外网站南宁网站定制公司
  • 广元网站建设广元企业邮箱注册申请要钱吗
  • 贵阳网站制作专业网站开发图书系统前台模板
  • 网站在线压缩wordpress获取分类文章
  • 来宾北京网站建设建立简单网站
  • 有一个做5s壁纸的网站做外贸有什么免费网站
  • 手机网站建设万网合肥做机床的公司网站
  • 品牌网站建设黑白I狼J网站建设费用包括哪些方面
  • app网站开发小程序网络营销的50种方法
  • 徐汇制作网站哪家好华为免费企业网站建设
  • 饶平网站建设如何优化网站首页代码
  • 网站建设网页设计公司长沙市公共资源交易中心
  • 西宁高端网站建设公司升学历有哪几种报名方式
  • 网站制作有限公司设计门户网站
  • 国外创意网站设计欣赏灵雀云 wordpress
  • 国外做二手服装网站有哪些租用海外服务器的网站有域名吗
  • 景区宣传网站制作模板如何做网络营销推广啃26金手指效果牛x
  • 石家庄网站制作工具成都网站seo推广
  • 网站设计培训课程怎样制作网站建设规划图
  • 跨境网站有哪些平台做网站都有备案吗
  • 二手车网站策划网站建设的五类成员