暴力算法
主要特征
1、没有预处理阶段
2、需要常量额外空间
3、通常需要模式串窗口向右移动一个位置
4、可以按照任意顺序进行比较
5、搜索的时间复杂度为O(mn)
6、文本字符期望比较次数:2n
暴力搜索算法由文本串中从0到n-m所有位置的比较组成,无论是否从模式串的起始位置开始,每次匹配过后,模式串向右移动一位。
暴力搜索算法没有预处理阶段,文本串和模式串需要常量额外空间,在搜索阶段的文本串的字符可以按照任意顺序进行比较,匹配的时间复杂度为O(mn)
Java代码实现:
/**
*暴力匹配 算法
* @param str 要进行匹配的字符串
* @param partten 匹配模式
* @return
首个匹配到的字母的位置
*/
public static int violentMatch(String
str,String partten){
int i = 0;
//可以理解为str的指针
int j = 0;
// Partten的指针
while (i<str.length() &&
j<partten.length()){
if(str.charAt(i)==partten.charAt(j)){ //匹配到了字符串
i++;
j++;
}else {
//匹配失败,i回退到刚刚开始匹配的下一个元素,j重置
i = i-j+1;
j = 0;
}
} //end while
两种情况:i>=str.length(),没有匹配到;j>=partten.length() 匹配到了
if(j==partten.length()){
return i-j;
}else {
return -1;
}
}
KMP算法 TODO