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

临沂企业网站2024年小学生简短小新闻

临沂企业网站,2024年小学生简短小新闻,java学习,宝安营销型网站设计KMP数组存的是什么 对于一个字符串 b,下标从1开始。 则kmp[i]表示 以i结尾的连续子串 s的前缀的最大值(等价于前缀最大结尾处) 如何求KMP 假设 i 以前的KMP都被求出来了。 j 表示上一个字符可以成功匹配的长度(等价于下标) …

KMP数组存的是什么

对于一个字符串 b,下标从1开始。

则kmp[i]表示 以i结尾的连续子串 = s的前缀的最大值(等价于前缀最大结尾处)

如何求KMP

假设 i 以前的KMP都被求出来了。

j 表示上一个字符可以成功匹配的长度(等价于下标)

如果b[j+1] != b[i]下一个位置匹配不上(即不能成为前缀)

则,让j = kmp[j] 即成为以j结尾的 连续子串 的 最长前缀 尾部的下标

退出循环后,若还能匹配上则j++(本质是,加上i的贡献。因为j = 0时可能匹配不上)

然后让kmp[i] = j即可。

运用kmp

和求kmp差不多,如果匹配不上,求让a[i]和以j结尾的连续子串的最长前缀匹配。(放宽要求)

算法正确性证明

用哲学的话来说就是,每一次失败都会让我变得更强大。

当匹配不上时,匹配串b至少会前移1位,由指针的思想。O(n)可证。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+7;
int kmp[N];
string a,b;
int j;
int main(){cin>>a>>b;a = " "+a;b = " "+b;for(int i = 2;i < b.size();i++){while(j&&b[j+1] != b[i]){j = kmp[j];}if(b[j+1] == b[i])j++;kmp[i] = j;}j = 0;for(int i = 1;i < a.size();i++){while(j&&a[i] != b[j+1]){j = kmp[j];}if(b[j+1] == a[i])j++;if(j == b.size()-1){cout<<i-(b.size()-1)+1<<endl;j=kmp[j];}}for (int i=1;i < b.size();i++)cout<<kmp[i]<<" ";return 0;
}

 

http://www.khdw.cn/news/10903.html

相关文章:

  • 只买域名怎么做网站域名查询ip138
  • 独立站平台seo网站关键词优化
  • 做古风头像的网站软文广告经典案例300大全
  • 300元做网站不收费推广网站有哪些
  • 做最精彩的绳艺网站百度精准营销获客平台
  • wordpress做商城网站吗电商seo是什么意思
  • 佛山专业建站公司哪家好大地资源网在线观看免费
  • 简单电商网站模板扶贫832网络销售平台
  • 网站怎样排名靠前最新新闻热点
  • 哪个网站使用vue 做的seo关键词排名优化的方法
  • 商城开发网站建设今日头条新闻最全新消息
  • 余姚网站推广北京百度seo排名点击器
  • 网站建设网络推广百度搜索引擎官网入口
  • app是怎么开发的seo网站关键词排名软件
  • 十堰专业网站建设公司百度关键词seo公司
  • 网站如何进行建设营销课程培训
  • 精品课网站制作发帖平台
  • java网站开发后端技术百度关键字优化精灵
  • wordpress重装空白网站运营推广选择乐云seo
  • 视频网站如何做弹幕怎么样自己创建网站
  • 网站建设服务商百度收录查询
  • 上行2m可以做网站yahoo搜索
  • 亚马逊品牌网站要怎么做教育培训机构十大排名
  • 网站开发有什么好的介绍营销推广的形式包括
  • 在美国如何设置dns访问国内网站seo软文是什么
  • 烟台装修公司网站建设成都seo优化
  • 日本 色彩网站网址大全南宁seo怎么做优化团队
  • 泰安网站营销推广最新疫情爆发
  • 怎么做网站转让机制 银行账户对接郴州网站seo外包
  • 慈溪网站制作哪家最好浙江网站建设推广