字符串搜索

原创 2016年06月01日 22:37:10

字符串搜索是一种非常常见的应用,暴力搜索是直接去匹配各个字符,但是这种方法对于重复度较高的字符串来说,有点浪费计算了。KMP算法利用子串本身的特性,试图建立一种状态机,指出匹配到当前字符串的状态如何。http://blog.csdn.net/thesby/article/details/51243270

Next数组怎么求?

next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。

这样的描述好像不太容易理解,我们可以直接看一个例子。
1 2 3 4 5 6 7 8
a b a a b c a c
所以,第一步的next
1 2 3 4 5 6 7 8
a b a a b c a c
0 1
第二步,看第三位的前一个是b,它与自己next位置1的字符a比较,不相等,所以他就是1了。
接下来,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1
第三步,看第三个字符a,可见它与自己next对应的是相等的,那就是在此基础上+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2
第四步,第四个字符的a和它对应的next位置2的b不等,所以它就是再和2位置b的next比较,此时相等了,那么就是2了,所以
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2
第五步,第五个字符b和自己对应next字符相等,所以+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3
第六步,第六个字符c没有与前面的重复,所以第七个位置的next就是1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1
最后一个,看第七个是a,它对应next位置字符刚好和它相等,所以第八个next就是2了,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1 2

参考了http://blog.csdn.net/quitepig/article/details/7933977

版权声明:本文为博主原创文章,转载时务必将原文链接置于转载文章首部可见处,尊重博主劳动。博主研究生一枚,现在正在找工作,对深度学习非常感兴趣,希望有做这方面的公司收留,谢谢!

在WinDBG中, 使用.shell命令来搜索字符串

本文 对于我来说, 使用WinDGB时最有用的命令之一就是.shell命令了.   Debugging Tools For Windows帮助文件说: .shell命令能加载一...
  • renwotao2009
  • renwotao2009
  • 2014年06月24日 11:00
  • 1018

浅谈通过正则表达式查找字符串

经常需要在文本中,查找某个子串是否存在。需求其实很简单,但每次去翻很长很长的正则表达式教程,都觉得特别吐血。因此特此做下记录:针对我这种简单需求,如何写正则表达式呢? 需求:在文本中查找一段字符串...
  • lizeyang
  • lizeyang
  • 2013年08月29日 19:39
  • 5636

Linux学习笔记--grep命令(搜索字符串命令)

grep,查找字符串的意思,作用是在文件中匹配符合条件的字符串。1. 命令格式:grep [选项] 字符串 文件名 ...2. 常用选项:"grep -c" 统计匹配到'字符串'内容的行数。(c为co...
  • daidaineteasy
  • daidaineteasy
  • 2016年03月07日 17:12
  • 8978

PHP中检索字符串

在PHP中,提供了很多用于查找字符串的函数,PHP也可以像Word那样实现对字符串的查找功能。 应用strstr()函数检索指定的关键字 获取一个指定字符串在另一个字符串中首次出现的位置到后者末尾的子...
  • qq_28602957
  • qq_28602957
  • 2016年03月23日 19:21
  • 1593

字符串搜索算法之Sunday

SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。两个算法在最坏情况下均具有线性的查找时间。但是在实用...
  • kankan231
  • kankan231
  • 2014年03月28日 16:27
  • 2639

反汇编学习之路之查找参考字符串

ollydbg(下面简称OD)提供了这样的一个功能:可以查找程序运行中出现的字符串。 比如下面的该软件,会弹出这样的对话框: 我们可以在弹出这个对话框时,回到OD操作界面进行查找上述对话框中出现的...
  • HK_5788
  • HK_5788
  • 2015年04月18日 21:37
  • 5848

外挂学习之路(12)--- 用CE搜索字符串和搜索字符数组的区别

用VS2008写个小工程做测试,得到如下一些结论  代码如下:TCHAR test[50] = TEXT("你好啊"); void CasciiDlg::OnBnClickedButton1() { ...
  • liujiayu2
  • liujiayu2
  • 2017年03月09日 19:30
  • 2056

56.windbg-s、#(搜索字符串、地址、汇编)

s(Search Memory) s 命令搜索内存查找指定模板 1.  寻找内存泄露的线索。比如知道当前内存泄漏的内容是一些固定的字符串,就可以在     DLL 区域搜索这些字符串出现...
  • hgy413
  • hgy413
  • 2013年07月16日 15:28
  • 3780

vim使用:全局搜索并跳转

使用VIM 来进行灵活的全局搜索跳转
  • YAOZHENGUO2006
  • YAOZHENGUO2006
  • 2017年06月04日 22:38
  • 2680

字符串匹配算法比较

字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符...
  • airfer
  • airfer
  • 2013年05月20日 18:46
  • 52775
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串搜索
举报原因:
原因补充:

(最多只允许输入30个字)