获取字符串中重复的子字符串列表

时间:2014-05-13 17:36:04

标签: javascript string performance loops substring

有一个javascript字符串var source;

找到所有长度的DUPLICATED子串的最简单的方法是让20说(没关系,如果它们被交叉,那就没关系,如果连21的子串都被满足,它们将在0到2的答案中重复20和1至21)。

最简单的方法是使用

var len=20;
var sourceLen=source.length;
for (var i=0; i<sourceLen; i++){
    for (var j=i+1; j<sourceLen; j++){
        if (source.substring(i,i+len)==source.substring(j,j+len)){
            console.log(source.substring(i,i+len));
        }
    }
}

但是你可以看到字符串是否增长,计算时间会增长得更多。 我正在考虑按步骤切换值(j + = 5;而不是j ++),但是存在问题。

此外,我正在考虑使用.indexOf仅使用一个for循环来获得相同的结果。

有没有更智能的方法来获取字符串中长度为20的重复字符串列表?

1 个答案:

答案 0 :(得分:1)

  

此外,我正在考虑使用.indexOf只用一个for循环来获得相同的结果。

indexOf仍在内部循环字符串。当然,我们不知道他们是否实施了more efficient string search algorithm;值得一试。

  

有没有更智能的方法来获取字符串中长度为20的重复字符串列表?

使用一组具有快速查找时间的子字符串。

function dupls(source, len, callback) {
    var subsSet = {};
    for (var i=0, l=source.length-len; i<l; i++) {
        var sub = source.slice(i, len);
        if (sub in subsSet) // or, possibly better, subsSet[sub]===true
            callback(sub);
        else
            subsSet[sub] = true;
    }
}
dupls("…", 20, console.log.bind(console));