javascript - 暴力破解字符串匹配javascript

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

最佳答案

你永远不会增加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/

相关文章:

javascript做新的不同的名字

javascript - 如何导入没有 d.ts 文件的第三方包?

javascript - 如何动态单击标签以仅检查整行?

JavaScript:调用类对象的函数将值添加到对象数组中

javascript - 使用Phonegap上传文件: File Transfer Error: request body stream exhausted

javascript - Jquery 下拉不在服务器上触发,在桌面上工作

javascript - 将键码写入控制台。反复

javascript - 为什么上个月的 12.31.2013 是 12.01.2013?

javascript - 如何在不更改注册表中的 MaxScriptStatements 的情况下防止 "A script on this page is causing Internet Explorer to run slowly"?

javascript - .exec() 和 .split() 的 RegExp 工作方式不同