最长字符串匹配算法(KMP算法)

2023-11-12

#include "stdafx.h"
#include<iostream>
#include<time.h>
#include<string>
using namespace std;
void init(string ,string);
void show(char [],int);
int kmp(string ,string,int pos);
void get_next(char*,int *);
string s1,t1;
int m,n;
char *s;
char *t;
int *next;
/*************************MAIN**************************************/
int main(int argc[],char*args[])
{
   
 double t=clock();
 cout<<"起始时间:"<<t<<endl;
 cout<<"找到位置为:"<<kmp("acbsabcaacabaabaabcacaabc","abaabca",1)<<endl;
    delete[] s;
 delete[] next;
 cout<<"结束时间:"<<clock()<<endl;
 cout<<"耗时:"<<(clock()-t)/1000<<"毫秒!"<<endl;
 return 0;
}  
/**********************++++NEXT++++********************************/
void get_next(char s[],int ne[])
{
    ne =new int[n+1];
    next=new int[n+1];
    ne[0]=9999;
    int i(1),j(0);
    ne[1]=0;
    while(i<=(int)(t[0]))//数组是字符型的,要转化为整数
 {
     if(j==0||t[i]==t[j]){++i;++j;ne[i]=j;}
     else j=ne[j];
 }
   for( i=1;i<=n;i++)
   {
   cout<<"next["<<i<<"]="<<ne[i]<<endl;
      next[i]=ne[i];
   }
}
/********************++++KMP+++**********************************/
  int kmp(string s0,string t0,int pos)
  {
        init(s0,t0);
        int i=pos,j=1;
        while(i<=((int)(s[0]))&&(j<=((int)(t[0]))))
  {
         if((j==0)||(s[i]==t[j])){++i;++j;}
      else j=next[j];
        
  }
        if(j>(int)(t[0])) return i-((int)(t[0]));
        else return 0;

  }
/***************++++INIT+++*****************************************/
    void init(string ss,string tt)
 {
       //cout<<"请输入原串S=: "<<endl;
       //cin>>s1;
       //cout<<"请输入模式串T=:"<<endl;
       //cin>>t1;
       s1=ss;
       t1=tt;
       m=s1.length();
       n=t1.length();
       //if((s=(char*)malloc((m+1)*sizeof(char)))<0){cout<<"failed\n";return;}
       s=new char[m+1];
       s[0]=m;
       //if((t=(char*) malloc((n+1)*sizeof(char)))<0) {cout<<"failed\n";return;}
       t=new char[n+1];
       t[0]=n;
       for(int i=1;i<=m;i++)
      s[i]=s1.at(i-1);
       for( i=1;i<=n;i++)
         t[i]=t1.at(i-1);
        cout<<"原串为: ";    show(s,m);
     cout<<"模式串为: ";  show(t,n);
        get_next(t,next);
 }
/*******************++++SHOW+++**************************************/
       void show(char s[],int n )
    {
         for(int i=1;i<=n;i++)
         cout<<s[i]<<"  ";
         cout<<endl;
         cout<<"长度为: "<<int(s[0])<<"\n";
    }

转载于:https://www.cnblogs.com/penboy/archive/2005/01/09/89039.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最长字符串匹配算法(KMP算法) 的相关文章

  • 解决this作用域不够的问题

    先看下方的vue代码 主要功能是点击按钮 实现将笑话渲染到页面上 div div
  • 单链表和循环单链表的基本操作

    单链表和循环单链表的基本操作 2021 8 23 lkm 该项目里面包含单链表操作以及循环单链表操作 注意 循环单链表判断条件为p L include
  • 如何读取resources目录下的文件路径(九种方式)

    前情提要 本文中提供了九种方式获取resources目录下文件的方式 其中打印文件的方法如下 根据文件路径读取文件内容 param fileInPath throws IOException public static void getFi
  • children和 siblings的菜单选择

  • 货仓选址(贪心)

    我之前在多篇博客中提到货仓选址 却发现从未仔细介绍过货舱选址 今天就来好好说一下货舱选址这个问题 就以这个图来说 我们假设Ap 1 gt x gt Ap 那么距离之和也就是 x A1 x A2 x Ap A p 1 x A p 2 x An
  • vue中router路由的原理?两种路由模式如何实现?(vue2) -(上)

    平时我们编写路由时 通常直接下载插件使用 在main js文件中引入直接通过引入vue router中的Router通过Vue use使用以后定义一个routeMap数组 里边是我们编写路由的地方 最后通过实例化一个 Router实例 将r
  • SaperaLT 简单介绍

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Sapera Teledyne DALSA 安装SDK包 同其他大厂的平台软件包一样 分为Runtime和SDK俩种安装包 SDK安装完成后 在开始菜单里面会有俩个目录 T
  • 求解矩阵的秩相关算法(C语言)

    矩阵的秩 在线性代数中 一个矩阵A的列秩是A的线性独立的纵列的极大数 通常表示为r A rk A 或rank A 一个矩阵A的列秩是A的线性独立的纵列的极大数目 类似地 行秩是A的线性无关的横行的极大数目 即如果把矩阵看成一个个行向量或者列
  • 莫队算法(区间查询)

    适用情况 1 只查询 不修改 2 已知 L R 的答案 可在O 1 时间内求出 L R 1 L R 1 L 1 R L 1 R 3 该算法复杂度为 O n sqrt n 分析思路 由上知 计算 L R 的时间为 L L R R 将询问看作点
  • 利用D盘内存给C盘扩容

    步骤一 右键此电脑 管理 步骤二 磁盘管理 步骤三 D盘分区为主分区 右击 压缩卷 填写需要的内存 然后点击压缩 步骤四 D盘右键 更改驱动器号和路径 把D盘改成 本地磁盘A 步骤五 在压缩出来的内存中 右键 新建简单卷 将其设置成磁盘D
  • 表(Table)和段(Segment)之间是什么关系

    Q A 表 Table 和段 Segment 之间是什么关系 English 作者 fuyuncat 来源 www HelloDBA com 日期 2009 08 28 02 13 24 问 表 Table 和段 Segment 之间是什么
  • 原型和原型链继承

    JavaScript 原型 JavaScript 是一种通过原型实现继承的语言与别的高级语言是有区别的 像 java C 是通 过类型决定继承关系的 JavaScript 是的动态的弱类型语言 总之可以认为 JavaScript 中所有 都
  • python连接pymysql主机目标无响应_python3之pymysql模块

    1 python3 MySQL数据库链接模块 PyMySQL 是在 Python3 x 版本中用于连接 MySQL 服务器的一个库 Python2中则使用mysqldb PyMySQL 遵循 Python 数据库 API v2 0 规范 并
  • MSYS2 Mingw Cygwin对比

    系列文章目录 文章目录 系列文章目录 前言 一 MSYS2 是什么 前言 Mingw 仅支持 32 bit 程序 现在一般用 Mingw w64 既支持 32 也支持 64 bit Mingw W64 官网 一个教程 MSYS2 是一个 w
  • 关于 document.onclick

    document onclick事件 当在浏览器内容域中当发生一次鼠标单机事件就产生一个事件对象
  • 融云获评「创业邦 · 最具创新价值出海服务商」

    点击报名 9 月 21 日融云直播课 8 月 22 日 23 日 创业邦主办的 2023 DEMO WORLD 全球开放式创新大会暨企业出海未来大会 在上海举行 会上发布了 创业邦 2023 出海企业创新价值 100 强 融云荣登榜单 获评
  • Oracle 数据库中删除表空间的详细步骤与示例

    系列文章目录 文章目录 系列文章目录 前言 一 查看表空间 二 数据迁移和备份 三 下线表空间中的对象 四 删除表空间 五 删除完成后的操作 总结 前言 在 Oracle 数据库中 表空间是存储数据的逻辑容器 有时候 我们可能需要删除不再使
  • 深度学习(20):nerf论文翻译与学习

    目录 1 Introduction 2 Related Work 3 Neural Radiance Field Scene Representation 4 Volume Rendering with Radiance Fields 5
  • Python中出现UnboundLocalError: local variable ‘xxx‘ referenced before assignment情况的解决方法

    UnboundLocalError local variable xxx referenced before assignment 在函数外部已经定义了变量n 在函数内部对该变量进行运算 运行时会遇到了这样的错误 主要是因为没有让解释器清楚
  • 使用Hyperledger Fabric Java SDK 构建和部署区块链网络(windows下)

    在区块链解决方案中 区块链网络作为后端与应用程序前端一起使用SDK与网络通信 为了建立前端和后端之间的通信 Hyperledger Fabric社区为各种编程语言提供了许多SDK 如NodeJS SDK和Java SDK 此代码模式解释了使

随机推荐

  • PHP保留两位小数的三种方法

    PHP保留两位小数的三种方法 ps 本人亲测 阿里云2核4G5M的服务器性价比很高 新用户一块多一天 老用户三块多一天 最高可以买三年 感兴趣的可以戳一下 阿里云折扣服务器 PHP保留两位小数的几种方法 link http www phpd
  • 用Compose shape把外框做成封闭图形

    Compose shape之后为何会成这个样子 以下并板框的实际图样 只论述方法 解决办法 compose shape 时不要把整个outline框起来 用tempgroup一段一段的选择 选完后complete 特别要注意的是要选中相应的
  • mysql数据库商业版与社区版的区别

    1 商业版本组织管理与测试环节控制更严格 稳定性方面 会比社区版本更稳定 2 mysql是成熟产品 商业版与社区版之间性能方面相差不大 3 商业版不遵守GPL协议 社区版遵守GPL协议可以免费使用 4 使用商业版后可以购买相关的服务 享受7
  • DVWA全级别详细通关教程

    目录 暴力破解 Brute Force low Medium High Impossible 命令注入 Command Injection low Medium High Impossible CSRF 跨站请求伪造 low Medium
  • 哈工大团队开源医学智能问诊大模型

    原文 CVHub 门头沟学院AI视觉实验室御用公众号 学术 科研 就业 185篇原创内容 公众号 Title HuaTuo Tuning LLaMA Model with Chinese Medical KnowledgePDF https
  • 【MySQL】MySQL索引详解

    Mysql索引 0 写在前面 1 为什么要使用索引 2 常见的索引模型 3 索引维护 4 回表 举例子 0 写在前面 文章中包含了 1 什么是索引 2 索引的数据结构 以及各自的使用场景 3 为什么要设置主键自增 4 基于主键索引和普通索引
  • 如何修改tomcat默认端口号8080的方法

    1 背景 在默认情况下 tomcat的端口是8080 使用了两个tomcat 那么就需要修改其中的一个的端口号才能使得两个同时工作 2 方法 2 1改动一 那么 如何修改tomcat的端口号呢 首先到安装目录 或者解压目录 下找到conf文
  • 理解c++中左值与右值的一篇文章

    C 中的左值与右值 说明 这一部分内容只是帮助理解 C 11 中左值与右值的概念 在编程实践中 因为编译器优化的存在 特别是其中的返回值优化 Return Value Optimization RVO 使你不需要额外关注左值与右值的区别 像
  • Idea新建项目名后出现中括号别名

    Idea新建项目名后出现中括号别名 1 修改pom xml文件的 artifactId标签 和项目名一致 2 项目名出现中括号是因为iml文件名和项目文件名不一样 需要更改iml文件名即可
  • 开关稳压DC—DC降压电路简介

    在做数字压力开关项目时 电源输入要求是12V 24V 10 系统内需要5V和3 3V的电源 这时提供了三个方案从中选择 方案一 使用24V 5V和5V 3 3V的LDO线性稳压芯片 方案二 使用24V 12V 12V 5V 5V 3 3V种
  • SIP Using SDP with Offer/Answer Model

    根据RFC3261 13 2 1所述 SIP使用的Offer Answer模型是建立在对话环境下的 RFC中还特意对Offer Answer交互有限制 1 初始Offer必须在INVITE消息或者第一个可靠的非失败型响应中 注 当时RFC3
  • arima 公式_小白快速上手数据分析1

    ARIMA时间序列分析 作用 ARIMA时间序列分析通常用于对单列具有时间序列的数据进行预测 例如销售量预测 股票收盘价预测等等 输入 单列数据序列的数据 例如每个月销售额 每天股票的价格 通常数据量为15 50 条 输出 对未来5 15
  • python3 asyncio 爬虫_爬虫高性能asyncio+ahttpio

    async实现协程 异步编程 我们都知道 现在的服务器开发对于IO调度的优先级控制权已经不再依靠系统 都希望采用协程的方式实现高效的并发任务 如js lua等在异步协程方面都做的很强大 python在3 4版本也加入了协程的概念 并在3 5
  • centos8 免登陆 免密码 多用户命令行 启动 ,以及 界面免密

    文章目录 修改 启动 service 临时切换 运行模式 永久 切换 运行模式 由于界面 不同 os 实现 不一样 所以 方法 估计 也都 不太通用 博主 还是 建议 大家 学习 linux 使用 命令行 进行学习 centos8 界面免密
  • 没什么用的代码-批量提取主目录下所有文件夹中pdf里面的图片

    一 提前安装 pip install pymupdf 二 实现的功能 读取一个文件夹及所有子文件夹中的pdf中的图片 判断图片存储条件 存储图片 三 代码 批量提取pdf文件中的图片 author Administrator import
  • Linux基础知识:认识一下内存

    1 什么是内存泄漏 对内存来说 如果之分配内存给程序 而程序使用完不进行释放 就会造成内存泄漏 甚至耗尽系统内存 需要调用free 或unmap 来释放这些内存 2 内存紧张 系统的处理机制 2 1 回收缓存 比如使用 LRU Least
  • 链表和数组的归并排序和快速排序

    链表的归并排序和快速排序 归并排序 Definition for ListNode public class ListNode int val ListNode next ListNode int x val x next null pub
  • 【Arthas】Arthas 导出堆栈信息

    1 概述 转载 Arthas 导出堆栈信息 2 开篇 arthas提供heapdump命令导出栈信息 类似jmap命令的heap dump功能 3 原理介绍 通过通过HotSpotDiagnosticMXBean的dumpHeap来导出栈参
  • Java面试题及答案整理汇总(2023最新版)

    前言 面试前还是很有必要针对性的刷一些题 很多朋友的实战能力很强 但是理论比较薄弱 面试前不做准备是很吃亏的 这里整理了很多面试常考的一些面试题 希望能帮助到你面试前的复习并且找到一个好的工作 也节省你在网上搜索资料的时间来学习 第1 10
  • 最长字符串匹配算法(KMP算法)

    include stdafx h include