字符串匹配-kmp算法
问题: 有字符串a、b, 求字符串a是否包含字符串b,如果包含, 返回起始位置。
解法1. 暴力破解。
从a的第一个字符起,移动n(n为b的长度), 判断a和b相应位置的字符是否匹配, 如不匹配则从a的第2位起,重复前述过程, 直至完全匹配上,或移动至a结尾(ps: 不用移动至a结尾, 移动到m-n位即可, m是a的长度)。
1 public static int contains(String a, String b) { 2 if(a.equals(null) || b.equals(null)) { 3 return -1; 4 } 5 if(a.length() < b.length()) { 6 return -1; 7 } 8 int i = 0, j =0; 9 while(i<=a.length() - b.length() && j<b.length()) { 10 if(a.charAt(i+j) == b.charAt(j)) { 11 j++; 12 }else { 13 j = 0; 14 i++; 15 } 16 } 17 if(j==b.length()) { 18 return i; 19 } 20 return -1; 21 }
View Code
该方法的时间复杂度为O(n2),等同于:
1 public static int contains(String a, String b) { 2 if(a.equals(null) || b.equals(null)) { 3 return -1; 4 } 5 if(a.length() < b.length()) { 6 return -1; 7 } 8 9 int i = 0; 10 while(i<=a.length() - b.length()) { 11 int j = 0; 12 while(j<b.length()) { 13 if(a.charAt(i+j) == b.charAt(j)) { 14 j++; 15 }else { 16 break; 17 } 18 } 19 20 if(j==b.length()) { 21 return i; 22 } 23 i++; 24 } 25 return -1; 26 }
View Code
解法2. kmp算法
转载于:https://www.cnblogs.com/lowseasonwind/p/9250209.html
字符串匹配-kmp算法相关推荐
- kmp算法详解php,php中字符串匹配KMP算法实现例子
KMP算法是一个比较高级的算法了,加了改进了,下面我们来在php中实现KMP算法,希望例子对各位同学会带来帮助哦. kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J. ...
- C++实现字符串匹配KMP算法
文章目录 1. 概述 2. 代码实现 3. 代码测试 1. 概述 Kmp算法的介绍及思想参阅下面两篇文章: 字符串匹配KMP算法 算法)通俗易懂的字符串匹配KMP算法及求next值算法 2. 代码实现 ...
- 字符串匹配 KMP算法
问题描述:字符串匹配即查找待匹配字符串(模式串)p在主串s中的位置.一般处理这种问题往往采用简单粗暴的方法--暴力匹配法.所谓暴力匹配法,就是对主串s的每一个字符与要匹配的字符串p的每个字符进行逐一匹 ...
- 字符串匹配——KMP算法
字符串匹配--KMP算法 字符串匹配是计算机编程中最常使用到的基础算法之一.字符串匹配相关的算法很多,Knuth-Morris-Pratt(KMP)算法是最常用的之一.最近在学习KMP算法,学习了 ...
- 字符串匹配KMP算法
字符串匹配KMP KMP过程其实就是去找下一个更好的状态的过程,省略去了中间穷举的无用过程,直接跳到下一个更好的状态,通过模式串本身的信息,站在模式串的角度来考虑问题 取长的一对 若想让模式串直接从S ...
- C语言实现字符串匹配KMP算法
相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也. 字符 ...
- 【数据结构与算法】字符串匹配 KMP 算法
单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 KMP 算法 KMP 算法是根据三位作者(D.E.Knuth,J.H.Morris ...
- 字符串匹配KMP算法的讲解C++
转自http://blog.csdn.net/starstar1992/article/details/54913261 也可以参考http://blog.csdn.net/liu940204/art ...
- 字符串匹配KMP算法的理解(详细)
1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文. ...
- 字符串匹配——KMP算法【C语言】
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用匹配失败后 ...
最新文章
- python 连接sqlite及操作
- 高度平衡二叉树的构建_平衡二叉树(AVL)树
- 遗传算法对于神经网络的优生优育
- c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc
- Linux grep命令——文本搜索工具
- [云炬创业基础笔记]第九章企业的法律形态测试4
- Mike and distribution(思维)
- 置信区间估计 预测区间估计_估计,预测和预测
- 信息技术课与计算机课有关系吗,信息技术教学与计算机教学的区别与联系
- 2015第16周四自控力
- check_mysql 脚本_如何使用myisamchk和mysqlcheck工具快速修复损坏的MySQL数据库文件
- 百叶窗叶片锋利,不安全
- jsjavaScriptDate的时间格式转换,直接粘贴就可以使用
- NMEA的GPGGA数据包解析 字符转数字
- Android苹方圆三合一字体,橘色主题-圆形图标 内置苹方+googlesans字体 透明文件夹...
- 产品体验报告:Keep
- 光致变色染料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 【MW】Drop Materialized View Hangs with 'Enq: JI - Contention'
- Android之单元测试
- 【K哥爬虫普法】蓄意突破反爬虫技术,爬取牌照信息