首页 > 编程语言 >字符串模式匹配算法 C++

字符串模式匹配算法 C++

时间:2022-11-27 01:11:29浏览次数:40  
标签:int pattern pos C++ next 算法 include 模式匹配 size

#include<iostream> #include<vector> #include<string> using namespace std; // 处理模式串,每一个位置都赋值为已匹配的位数 vector<int> next_pos(string pattern){     //初始化next     vector<int> next(pattern.size());     next[0] = -1;   // 第0个位置永远是没有用, 第一种情况,j = 0;     int k = 0;     for(int j = 1;j < pattern.size();j++){         if(pattern[k] == pattern[j-1]){             if(k == j-1){                 k = 0;                 next[j] = 0;                             }else{                 next[j] = next[j-1] + 1;                 k++;             }         }else if(k!=0) {             k=0;             if(pattern[k] == pattern[j-1]){                 next[j] = 1;                 k++;             }else{                 next[j] = 0;             }         }     }     return next; }
bool kmp(string s, string pattern,int pos){     vector<int> next = next_pos(pattern);     int j = 0;     for(int i = 0;i < s.size() && j<pattern.size();){         if(s[i] == pattern[j]) {i++;j++;}         else{             if(j == 0) i++;             else{                 j=next[j];             }         }     }     if(j == pattern.size()) return true;     return false; } int main() {     std::cout << "Hes  "<< kmp("Hello World!","Hes",0) << " Hello World!\n"; }

标签:int,pattern,pos,C++,next,算法,include,模式匹配,size
From: https://www.cnblogs.com/daniel123/p/16928823.html

相关文章

  • 数据结构与算法-稀疏数组
    稀疏数组当一个数组中大部分元素为0,或者为同一个数值时,可以使用稀疏数组来保存该数组稀疏数组的处理方法是:​ 1.记录数组一共有几行几列,有多少不同的值​ 2.把具有......
  • 斐波那契数的矩阵算法及 python 实现
    importnumpyasnpimportmatplotlib.pyplotaspltfromfunctoolsimportreducefromsympyimportsqrt,simplify,fibonacciimportsympy斐波那契数的矩阵形式......
  • C++:类继承知识回顾
    概述  在实际代码开发中,我们通常不会去开发最底层,而是成为“调库侠”。面对众多类库,我们需要掌握基本库的用法,比如string、valarray、iostream、any等,本白在开发capl测......
  • 剑指offer——Day15 搜索与回溯算法(中等)
    Day152022.11.21搜索与回溯算法(中等)34.二叉树中和为某一值的路径自己实现用递归。递归函数的思路:首先是递归出口root==NULL时返回-1,告诉上层节点这个地方是NULL,以便......
  • 【语音SBC算法】基于正交滤波器组的语音SBC算法设计与实现
    数字语音编码是现代数字语音通信以及数字语音存储回放的前提和基础,对数字语音通信系统和数字语音存储回放系统的性能具有决定性的作用。目前,主要从编码速率、时延、语音回......
  • 回溯算法
    算法思想回溯实际上是一种试探算法,这种算法跟暴力搜索最大的不同在于,在回溯算法里,是一步一步地小心翼翼地进行向前试探,会对每一步探测到的情况进行评估,如果当前的情况已经......
  • 基于蚁群算法的多配送中心的车辆调度问题的研究附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • C++ 使用文件流写/读文本文件、二进制文件、按指定格式写/读文本文件
    1.使用文件流写文本文件:#include<iostream>#include<string>#include<fstream>usingnamespacestd;intmain(){stringname;intage;ofs......
  • c++ 面向对象 class类总结
    c++三大特性访问权限​ 在c++中通过public、protected、private三个关键字来控制成员变量和成员函数的访问权限,它们分别表示为公有的、受保护的、私有的,称为成员访问限......
  • 细分图中的可到达节点 Dijkstra算法Python实现
    题目大意个无向图(原始图)中有n个节点,编号从0到n-1。对每条边增加若干节点构建“细分图”,求解从节点0出发能抵达的不超过距离为maxMove的节点数量。输入:edges=[......