字符串匹配算法
来源:互联网 发布:eclipse修改端口号 编辑:程序博客网 时间:2024/05/16 04:40
字符串的一种基本操作就是字符串查找:给定一段长度为N的文本和一个长度为M的模式(pattern)字符串,在文本中找到一个和该模式相符的字符串。
如:
模式-> needle
正文->iinshneedleeina
当你在文本编辑器或是浏览器中查找某个单词时,就是在查找字符串。字符串查找的一个经典应用就是在接货通信内容中寻找某种重要的模式。一位军队将领感兴趣的可能是在截获文本中寻找和“拂晓进攻”类似的字句。一名黑客感兴趣的可能是在内存中查找和“password”相关的内容。
以下介绍两种字符串匹配算法:
一、暴力子字符串查找算法。
基本思想:用i跟踪文本,j跟踪模式。对于每个i,首先重置为0并不断将它增大,直至找到了一个不匹配的字符或是模式介数(j==M)位置。
public class StringMatch {public int matchString(String txt, String pattern) {int N = txt.length();// 文本长度int M = pattern.length();// 模式长度for (int i = 0; i <= N - M; i++) {int j;for (j = 0; j < M; j++)if (txt.charAt(i + j) != pattern.charAt(j))break;// 找到匹配if (j == M)return i;}return N;// 未找到匹配}public static void main(String args[]) {String txt = "shiehuifhsheijid";String pattern = "she";StringMatch stringMatch = new StringMatch();System.out.println(stringMatch.matchString(txt, pattern));}}
输出:9
一种最坏的情况是文本和模式都是一连串的A接一个B。那么,对于N-M+1个可能的匹配位置,模式中的所有字符都需要和文本比对,总成本为M(N-M+1)。一般来说M远小于N,因此总的复杂度接近O(n*m)。
所以,我们需要寻求更为高效的字符串匹配方法。
二、KMP算法
晦涩难懂。。。
为什么会看这个?是在牛客网上看了一道这样的题目:
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。
给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。
测试样例:
"cdab",4,"abcd",4
返回:true
public class Rotation {public boolean chkRotation(String A, int lena, String B, int lenb) {if (lena != lenb) {return false;}String C = A + A;return C.contains(B);}public static void main(String[] args) {String A = "cdab";int lena = A.length();String B = "abcd";int lenb = B.length();Rotation rotation = new Rotation();System.out.println(rotation.chkRotation(A, lena, B, lenb));}}
输出:true
视频介绍说要用KMP,看了半天没看懂,上面的代码也通过了呀,并没有用到KMP。。。
0 0
- 算法 字符串匹配算法
- 字符串匹配算法
- BM字符串匹配算法
- KMP 字符串匹配算法
- 字符串匹配算法
- 字符串匹配算法
- 字符串匹配算法(摘)
- 字符串匹配算法
- 字符串匹配算法
- 字符串匹配的算法
- kmp字符串匹配算法
- 字符串匹配算法
- 字符串匹配算法研究
- 字符串模式匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串模式匹配算法
- BM字符串匹配算法
- Object类,接口类与抽象类
- 字节排序函数
- 理解SQL原理,写出高效的SQL语句
- 贴点国外大神代码,没事瞅瞅
- 【二分+几何】F - Expanding Rods
- 字符串匹配算法
- HDU 5754 Life Winner Bo(博弈)
- express框架之session
- Android多线程----异步消息处理机制之Handler详解
- 策略模式
- 【HDU 1506】Largest Rectangle in a Histogram(DP)
- 求解二分图的最大匹配的匈牙利算法---POJ 1325 Machine Schedule
- 欢迎使用CSDN-markdown编辑器
- 详解SQL Server连接(内连接、外连接、交叉连接)