bruteforce字符串匹配javascript

时间:2014-11-19 12:07:22

标签: javascript

  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");

2 个答案:

答案 0 :(得分:2)

您永远不会递增j开始。因此无限循环。

然后,正如Claudio评论的那样,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;
    }

答案 1 :(得分:0)

我想这会起作用

for (var i = 0; i < M; i++) {
            var j =0;
            while (j < N) {
                if (text.charAt(j) != pattern.charAt(i)) {
                     break;
                     }
                 j++
            }
            if (j == M) {return i;}
        }

这是解释

每个模式        匹配文本的每个字符