str表示文本串,m表示模式串;

str[i] 和 m[j] 是正在进行匹配比较的字符;

KMP的时间复杂度是O(m+n)  ,  暴力求解的时间复杂度是O(m*n)

KMP利用了m[ 0 : j-1 ]和str[ i-j : i-1 ]是相同的这一点,而暴力求解显然做不到.

int kmp(string str,string m)
{
int next[MAXN];
next[] = -;
int i=;
int j=-;
while(i<m.size())
{
if(j==- || m[i]==m[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
} i=;
j=;
while(i<str.size() && j<m.size())
{
if(j==- || str[i]==m[j])
{
i++;
j++;
}
else
{
j =next[j];
}
     if(j==m.size()-1)
     {
      return i-j;
     }
}
   return -1;
}

最新文章

  1. vi编辑器命令
  2. Neural Style学习2——环境安装
  3. 最清晰的Android多屏幕适配方案
  4. console的一个小易错点
  5. hdu 4445
  6. MySQL高可用性大杀器之MHA | 火丁笔记
  7. [转]Android读写文件
  8. Fedora15下搭建QT开发环境及编译QT
  9. html音视频标签
  10. ubuntu下打开chm文件
  11. Apex 中的自定义迭代器
  12. SQL Server之深入理解STUFF
  13. 保护 .NET Core 项目的敏感信息
  14. 编写脚本,出现 TypeError: exceptions must be old-style classes or derived from BaseException, not unicode怎样解决?
  15. T-SQL 类型转换
  16. ORM数据库框架 LitePal SQLite MD
  17. 【spring框架】spring获取webapplicationcontext,applicationcontext几种方法详解--(转)
  18. 使用ABP框架踩过的坑系列4
  19. 微信小程序页面3秒后自动跳转
  20. jQuery.toggleClass() 和detach()方法详解

热门文章

  1. mudbox安装未完成,某些产品无法安装的解决方法
  2. Trie树的插入,查前缀,查单词,删前缀和删单词。
  3. Rancher的部署安装(编排选用K8S)
  4. haproxy笔记之四:配置文件中的关键字参考
  5. js 实现排序算法 -- 快速排序(Quick Sort)
  6. 云服务器离线安装MariaDB安装步骤和解决办法
  7. Python 学习之Anaconda 设置默认打开chrome 浏览器
  8. 直播问答App乃虚火,调侃知识终不能长久盈利
  9. 解决appium升级后不支持使用name定位的问题
  10. hiho一下:Beautiful String