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

KMP和扩展KMP

KMP

next函数

在这里插入图片描述

const int N=1e6+10,mod=998244353,inf=1e15;
int nxt[N];
string s1,s2;
void solve()
{cin>>s1>>s2;int n1=s1.size(),n2=s2.size();s1=' '+s1;s2=' '+s2;nxt[1]=0;//nxt:s2[1:i]后缀和前缀匹配的最长长度for(int i=2,j=0;i<=n2;i++){while (j&&s2[i]!=s2[j+1])j=nxt[j];//跳回能匹配的地方 即和s2[1:j]后缀匹配的前缀 直到0停止if(s2[i]==s2[j+1])j++;//预判下一个nxt[i]=j;//[i:n]最长前缀匹配长度}for(int i=1,j=0;i<=n1;i++){//s1 s2匹配while (j&&s1[i]!=s2[j+1])j=nxt[j];if(s1[i]==s2[j+1])j++;if(j==n2){//匹配成功cout<<i-n2+1<<endl;}}forr(j,1,n2)cout<<nxt[j]<< ';cout<<endl;
}

扩展KMP

在这里插入图片描述

const int N=2e7+10,mod=1e9+9,inf=1e9+10;
int z[N],p[N];
int get_z(string s,int n){z[1]=n;//盒子:[l:r] 最靠右的 已经匹配的LCPint l=0,r=0;forr(i,2,n){if(i<=r)z[i]=max(0ll,min(z[i-l+1],r-i+1));//盒内 使用前面的z[i-l+1]加速 或者使用盒子while(s[1+z[i]]==s[i+z[i]])z[i]++;//盒外向后一个个暴力if(i+z[i]-1>r)l=i,r=i+z[i]-1;//更新盒子}int wz=0;forr(i,1,n){wz^=(1ll*i*(z[i]+1));}return wz;
}
int exkmp(string s,string t,int n,int m){//和别的串匹配LCPint l=0,r=0;forr(i,1,m){if(i<=r)p[i]=max(0ll,min(z[i-l+1],r-i+1));//找s的z函数中的值  //为什么不用p数组对应点? 本来这里使用前面的盒子应该用t跟自身的匹配点 但是没必要再找一遍t的z函数 因为t是要和s进行匹配的 [l:r]已经和s匹配好了 直接用s的对应位置while(1+p[i]<=n&&i+p[i]<=m&&s[1+p[i]]==t[i+p[i]])p[i]++;//盒外向后一个个暴力if(i+p[i]-1>r)l=i,r=i+p[i]-1;//更新盒子}int wz=0;forr(i,1,m){wz^=(1ll*i*(p[i]+1));}return wz;
}
void solve(){string a,b;cin>>a>>b;int an=a.size(),bn=b.size();a=' '+a,b=' '+b;//get_zcout<<get_z(b,bn)<<endl;//get_pcout<<exkmp(b,a,bn,an)<<endl;
}
http://www.dtcms.com/a/406635.html

相关文章:

  • 做房产信息互联网网站需要什么资质织梦开发供需网站
  • 汽车安全性能测试与铸铁底座的重要性
  • 郴州网站建设解决方案计算机网页制作工具
  • DHCP服务器
  • wordpress nginx 固定链接seo推广的特点
  • AI算力加速
  • 《强化学习数学原理》学习笔记1——贝尔曼期望公式推导
  • 9.9元奶茶项目:matlab+FPGA的cordic算法(双曲线向量模式)计算对数log
  • 发布网站需要备案安徽省住房城乡建设厅官方网站
  • 初识MYSQL —— 数据库基础
  • PHP 8.5 升级指南 了解即将废弃的 11 个功能和完整迁移方案
  • 月饼杯II
  • OpenHarmony位置服务模块架构设计
  • 河南制作网站国外wordpress主题
  • C# WPF DataGrid 数据绑定时的单元格编辑类型模板
  • 天津微网站做年报的网站
  • Marin说PCB之POC电路layout设计仿真案例---13
  • 随堂笔记2025-925
  • 龙岩建网站wordpress php7 500
  • 阿里云 iis 多个网站建筑公司资质
  • Python读取MongoDB的JSON字典和列表对象转为字符串
  • 论证框架的四个核心问题(概念界定/基础理论/研究模型/研究假设)的因果链
  • IO流与网络编程
  • 案例18-新增搜索留言功能
  • Codeforces Round 1047 (Div. 3) F题题解记录
  • 基于 Redis 的分布式锁
  • 郑州视频网站建设wordpress登录去不了后台
  • 淮安做网站杨凯企业建站官网运营
  • django 使用绑定多个数据库实现数据的同步
  • 面试复习题---Android技术专家3