function search(pattern, text) {
var M = pattern.length;
var N = text.length;
for (var i = 0; i < N - M; i++) {
var j =0;
while (j < M) {
if (text.charAt(i + j) != pattern.charAt(j)) {break;}
}
if (j == M) {return i;}
}
return -1;
}
console.log(search("rf", "jdsrfan"));
我想用 JavaScript 制作一个强力字符串匹配算法。谁能告诉我上面的代码有什么问题吗?
我自己修复了它,修复代码如下:
// return offset of first match or -1 if no match
function bruteForcePatternSearch(sPattern, sText) {
var M = sPattern.length,
N = sText.length;
for (var i = 0; i <= N - M; i++) {
var j=0;
while (j < M) {
if (sText.charAt(i+j) !=sPattern.charAt(j)){
break;
}
j++;
}
if (j == M) {return i;} // found at offset i
}
return -1; // not found
}
bruteForcePatternSearch("abracadabra","abacadabrabracabracadabrabrabracad");
最佳答案
你永远不会增加j
首先。因此无限循环。
然后,正如克劳迪奥评论的那样,i < N - M
是错的。应该是i <= N - M
。
剧透:这里是固定函数。但我建议你不要照原样做,而是尝试自己做。
function search(pattern, text) {
var M = pattern.length;
var N = text.length;
for (var i = 0; i <= N - M; ++i) {
var matched = true;
for (var j = 0; j < M; ++j) {
if (text.charAt(i + j) != pattern.charAt(j)) {
matched = false;
break;
}
}
if (matched) {
return i;
}
}
return -1;
}
关于javascript - 暴力破解字符串匹配javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016434/