这两天复习数据结构(严蔚敏版),记录第四章串中的两个重要算法,BF算法和KMP算法,博主主要学习Java,所以分析采用Java语言,后面会补上C语言的实现过程. 1.Brute-Force算法(暴力法) 要求:将主串的第i个字符(一般情况i为1)和字串的第一个字符进行比较.若相等,则继续比较后续字符:若不相等,则从主串的下一个字符起,重新与子串的第一个字符比较.成功,返回主串中与子串相匹配的子序列的第一个字符的序号:失败,返回0 public class Brute_Force { /** *…
后缀自己主动机(sam)对字符串匹配 ==== 我们已经配置了一个相对较短的模式字符串sam. 为P="abcabcacab", T[1..i]后缀.因此,它是sam最长前缀长度: T: b a b c b a b c a b c a a b c a b c a b c a c a b c 1 1 2 3 1 1 2 3 4 5 6 7 1 2 3 4 5 6 7 5 6 7 8 9 10 4 假设最长前缀长度是|P|,则表示T[1..i]的后缀和P匹配. 内存使用 可能多个t…
var str="abcbababcbababcbababcabcbaba";//主串 var ts="bcabcbaba";//子串 function BF(s,t){//BF算法 var i=0,j=0,v=-1; while(i<s.length&&j<t.length){ if(s[i]==t[j]){//相等就移动指针 i++; j++; } else{//指针归零 i=i-j+1; j=0; } } if(j==t.lengt…