C++ 实现KMP字符串匹配算法

简介: C++ 实现KMP字符串匹配算法

以前写的代码,先搬运到CSDN上来。先贴代码,后面补说明


代码实现


KMP主函


int KMP(char * t, char * p)
{
  int i = 0;
  int j = 0;
  int* pNext = new int[(int)strlen(p)]{-1};
  GetNext(p,pNext);
  while (i < (int)strlen(t) && j < (int)strlen(p))
  {
    if (j == -1 || t[i] == p[j])
    {
      i++;
      j++;
    }
    else
      j = pNext[j];
  }
  if (j == strlen(p))
    return i - j;
  else
    return -1;
}


GetNext函数


void GetNext(char * p, int * next)
{
  next[0] = -1;
  int i = 0, j = -1;
  while (i < (int)strlen(p))
  {
    if (j == -1 || p[i] == p[j])
    {
      ++i;
      ++j;
      next[i] = j;
    }
    else
      j = next[j];
  }
}


相关文章
|
2月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
2月前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
97 1
两个字符串匹配出最长公共子序列算法
|
2月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
675 0
高精度算法(加、减、乘、除,使用c++实现)
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
46 0
|
2月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
85 0
|
2月前
|
存储 算法 决策智能
【算法】博弈论(C/C++)
【算法】博弈论(C/C++)
|
2月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
2月前
|
机器学习/深度学习 人工智能 算法
【算法】最长公共子序列(C/C++)
【算法】最长公共子序列(C/C++)
|
2月前
|
人工智能 算法 BI
一篇带你速通差分算法(C/C++)
一篇带你速通差分算法(C/C++)
|
2月前
|
人工智能 算法 C++
一篇带你速通前缀和算法(C/C++)
一篇带你速通前缀和算法(C/C++)