字符串常见算法之一:查找一个短串在一个长串中位置
来源:互联网 发布:java爬虫框架使用排行 编辑:程序博客网 时间:2024/05/16 04:33
字符串常见算法之一:查找一个短串在一个长串中位置 http://www.cppblog.com/humanchao/archive/2009/11/25/101918.aspx介绍的一些字符串处理的问题在日常编程中比较常见,但是在大学读书的时候几乎一个都没有涉及,最近学习了一下在这里介绍给大家,仅供参考。这些算法与内容包括:1、 查找一个短串在一个长串中位置;2、 查找一个字符串中最长的重复子串;3、 查找一个字符串中重复最多的子串;4、 两个字符串最长的公共子串(连续);5、 两个字符串最长的公共子序列(不连续);6、 介绍一种强大的数据结构,Suffix tree.这里有一个PPT:http://www.cppblog.com/Files/humanchao/StringAlg.zip-------------------------------------------------查找一个短串在一个长串中位置这个问题传统的解法时间复杂度为O(m*n),m、n为两个串的长度。有一个Sunday算法,可以最大限度的优化这个比较过程,原理如下:1、建立一个hash table,依次把search各个字符值作为table索引,为table相应的位置一个值(表示字符存在),如果出现重复,后面的位置会覆盖前面的位置。例:我们要在"WHICH-FINALLY-HALTS.—AT-THAT-POINT"(简称string)查找" AT-THAT "(简称pat),刚开始时,把pat与string对齐,查看串string中与串pat 相对应的字符(F),在pat的位置,这个查找的过程时间复杂度通过hash table的下标索引为 O(1): 2、如果发现没有,说明字符F之前已经无法与pat匹配,直接跳到position(F)+stringlength(pat) 3、发现”-”在pat位置3,于是重新定位对齐两串为: 4、倒序(从最后一个向前)比较两串,发现无法匹配,继续跳转->查找->定位因为上面已经有一个T匹配成功,这次要从HALTS的S来查找,于是定位为:5、上图无法匹配,从”--AT-“中A后的”-”继续查找,重复上过程,最终匹配如图: 这个算法关键点:1、建立为pat建立hash表,以提高查找字符的速度;2、对齐跳转,快速的后移比较,使比较次数减少。具体的代码实现可以参考链接:http://blog.csdn.net/unicode1985/archive/2007/05/30/1631038.aspx
- 字符串常见算法之一:查找一个短串在一个长串中位置
- kmp算法 查找一个字符串在另一个字符串出现的位置
- 给一个字符串S和一个字符串数组T(T中的字符串要比S短许多),设计一个算法, 在字符串S中查找T中的字符串。
- 查找一个字符串在另一个字符串的位置原理分析
- 在一个字符串中查找另外一个字符串的全排列出现位置
- 使用boost查找区分大小写查找,查找一个字符串在另外一个字符串的位置,返回索引。
- 查找一个在另一个字符串出现在另一个字符串的第一个位置
- 查找一个字符串在另一个字符串中出现的所有位置
- 查找某字符串在另外一个字符串中最后出现的位置
- 查找一个字符串在另一个字符串中出现的所有位置
- java查找一个字符串2在字符串1中第一次出现的位置
- 算法4.1 在一个字符串寻找子串,并返回位置
- 在一个矩阵中查找一个字符串
- 查找某个字符在一个字符串中的位置,假设字符串中的字符是有序的,如“adfgikmnprs”中查找g的位置。(折半查找)
- 在给定位置插入一个字符串
- 【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回
- 模拟实现在一个字符串中查找一个字符串
- 利用Collections工具类查找一个字符串在字符串数组里的位置即其角标
- 使用Python二进制与十进制之间的转化,可以操作浮点数!
- PCB常见的错误分析yingxuexuan写
- 拥塞控制
- 在Ubuntu9.10环境下的Hadoop分布式模式的部署
- PHP登陆代码问题
- 字符串常见算法之一:查找一个短串在一个长串中位置
- Visual Assist X 10.6.1830.0 常用快捷键
- 使用JAVA导入某个MSN帐号的好友列表并发送消息
- 记国庆假期
- 苹果施压,魅族M8本月(10月)停产
- 照片整理小记
- vs使用Code Snippet提高工作效率
- struts2重新启动报错
- Windows编程中的映射模式和坐标转换