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

浙大数据结构:KMP 字符串匹配算法比较

主要是学习Kmp匹配算法
如果不会可以到下面这个链接学一下

Kmp算法学习

Kmp算法

先是构造前缀数组,然后进行匹配

#include <iostream>
#include<string>
using namespace std;
#define endl '\n'


int kmp(string s,string t)
{
   int j=-1;
   int next[100005];
   next[0]=j;
   for(int i=1;i<t.size();i++)
   {
    while(j>=0&&t[i]!=t[j+1])j=next[j];
    if(t[i]==t[j+1])j++;
    next[i]=j;
   // cout<<i<<' '<<j<<' '<<next[i]<<endl;
   }
 //  cout<<endl;
   j=-1;
   for(int i=0;i<s.size();i++)
   {
    while(j>=0&&s[i]!=t[j+1])j=next[j];
    if(s[i]==t[j+1])j++;
   
   if(j==(t.size()-1))return i-t.size()+1;
   //cout<<j;
   }
   return -1;
}
int main()
{
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  string str;
  cin>>str;
  int n;
  cin>>n;
  while(n--)
  {
    string s;
    cin>>s;
    int k=kmp(str,s);

    if(k>=0)cout<<str.substr(k);
    else cout<<"Not Found";
    cout<<endl;
  }
  
  return 0;
}


http://www.kler.cn/a/350848.html

相关文章:

  • MySQL程序之:使用类似URI的字符串或键值对连接到服务器
  • 构建优雅、高效的 Nodejs 命令行工具 - Archons
  • 大疆发布可折叠航拍无人机,仅重249g,支持 4800 万像素拍摄
  • 神经网络常见操作(卷积)输入输出
  • .NET8.0多线程编码结合异步编码示例
  • 基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
  • linux系统账号安全应该如何设置
  • 第2节 如何学习鸿蒙技术
  • React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件
  • cisco网络安全技术第3章测试及考试
  • excel如何把年龄转换为日期
  • HTML5_标签_各类表格的实现
  • 【排序】——1.冒泡排序法(含优化)
  • 嵌套之美:广义表,在数据层层叠叠之间,展现信息的层次
  • RT-Thread线程的定义和属性
  • 【星闪开发连载】WS63E模组的速度测试
  • 3D 数字人与 2D 数字人的区别
  • 代码随想录算法训练营第八天(1)|哈希表理论基础
  • 线程简单的用例
  • Vue3动态组件component不生效问题解决方法
  • Linux的GDB学习与入门
  • RabbitMQ是什么?
  • 通用数据库对象设计
  • Python酷库之旅-第三方库Pandas(155)
  • chat_gpt回答:python从bin文件里读四字节整型
  • Android启动第三方App的服务