BF算法学习笔记
2016-03-22 19:22
330 查看
var str1 = "ABC ABB ACF"; var str2 = "ABB"; var bValue = this.BF_ordinary(str1, str2); ///////// //暴力算法 //递归版本 ///////// BF_Recursive:function (sourceStr, searchStr, offset) { var mainLength = sourceStr.length; var searchLength = searchStr.length; if (searchLength > mainLength - offset) { return -1; } offset = offset || 0; for (var i = 0; searchLength > i; i++) { if (searchStr.charAt(i) !== sourceStr.charAt(offset + i)) { return BF_Recursive(sourceStr, searchStr, offset + 1) } } return offset; } BF_ordinary: function(sourceStr, searchStr){ var sourceLen = sourceStr.length; var searchLen = searchStr.length; var padding = sourceLen - searchLen; /*方式1*/ for(var i = 0; i <= padding; i++){ if(sourceStr.charAt(i) == searchStr.charAt(0)){ var complete = searchLen; for(var j = 0; j < searchLen; j++){ if(sourceStr.charAt(i+j) == searchStr.charAt(j)){ --complete; if(!complete){ return i; } } } } } return -1; /*方法二*/ for(var offset = 0; offset < padding; offset++){ var match = true; for(var i = 0; i < searchLen; i++){ if(searchStr.charAt(i) !== sourceStr.charAt(offset+i)){ match = false; break; } } if(match){ return offset; } } return -1; /*方法三*/ var i = 0, j = 0; while(i < sourceLen){ if(sourceStr.charAt(i) == searchStr.charAt(j)){ i++; j++; }else{ i = i - j + 1; j = 0; } if(j == searchLen){ return i - j; } } }
参考原作:http://www.cnblogs.com/aaronjs/p/4218650.html
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析