一、定义
字符串模式匹配算法(string searching/matchingalgorithms):就是在一个文本或者较长的一段字符串中,找出一个或多个指定字符串(Pattern),并返回其位置。这类算法属基础算法,各种编程语言都将其包括在自带的String类函数中,而且由之衍生出来的正则表达式也是必须掌握的一种概念和编程技术。
二、常见算法
- Brute-Force 算法
- KMP 算法
- Boyer-Moore 算法
- Sunday 算法
2.1、Brute-Force 算法
其思路很简单:从目标字符串初始位置开始,依次分别与Pattern的各个位置的字符比较,如相同,比较下一个位置的字符直至完全匹配;如果不同则跳到目标字符串下一位置继续如此与Pattern比较,直至找到匹配字符串并返回其位置。 我们注意到Brute Force 算法是每次移动一个单位,一个一个单位移动显然太慢,设目标串String的长度为m,Pattern的长度为n,不难得出BF算法的时间复杂度最坏为O(mn),效率很低。 代码也很简单,如下所示(Java)。
/***
* Brute-Force算法
*
* @param source
* @param pattern
* @return
*/
public static int BruteForceMatch(String source, String pattern){
int index = -1;
boolean match = true;
for (int i = 0 , length = source.length() - pattern.length(); i < length; i ++){
match = true;
for(int j = 0; j < pattern.length(); j ++){
if (source.charAt(i + j) != pattern.charAt(j)) {
match = false;
break;
}
}
if (match) {
index = i;
break;
}
}
return index;
}
参考致谢:
(1)、http://blog.csdn.net/chndata/article/details/43792363