前几天写了 Boyer-Moore字符串搜索算法的思路,下面是javascript实现的代码,因为上一篇已经写了他的思想,这里就不过多介绍了,适用于在数个待搜索字符串中找出全部包含待匹配字符串的情况,但是此处只有坏字符规则,没有加入好后缀。
//如果一个字符串里包含多个待匹配字符串则值默认匹配第一个
function Search() {
var arr = [
["z", "h", "a", "n", "n", ",", "c", "h", "i"],
["z", "c", "0", "h", "4", "i"],
["c", "h", "i", "c", "h", "i"];
];// 待搜索词
var yetSearchDate = ["c", "h", "i"]; //待匹配字符串
var len = yetSearchDate.length;
var z = 0; //游标,用来判断在整个arr二维数组中存在几个结果
// 待搜索词的遍历从待匹配字符串对应的最后一位开始
var j = len - 1;
// 在待搜索词长度范围内循环
while (j < arr[i].length){
var k = len - 1; //待匹配字符串循环游标
for ( ; k > 0; k--) {
// 判断两个字符是否相等,不等则移动待搜索字符串游标j
if (arr[i][j] != yetSearchDate[k]) {
//判断此字符在不在待匹配字符串中
for (var x = 0; x < len; x++) {
//不在其中则移动待搜索字符串游标j
if (x == len - 1) {
j += len - 1;
}
}
else // 在则移动待搜索字符串游标j
j += len - 1 - x;
}
// if (arr[i][k]) {}
break;
}
else //相等则接着向前一位比较
j --;
}
//如果比较至k==0证明待搜索字符串中含有待匹配字符串,z加一
if (k == 0) {
z++;
console.log(arr[i]);
for (var y = j; y < j +len; y++) {
// Things[i]
console.log(arr[i][y]);
}
// console.log(arr[i]);
break;
}
}
}
console.log("一共查询到" + z + "个结果");
}
看起来好像很麻烦,其实并没有啦,自己做调试起来很快就实现了。