Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取字符串中重复子字符串的列表_Javascript_String_Performance_Loops_Substring - Fatal编程技术网

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

Javascript 获取字符串中重复子字符串的列表,javascript,string,performance,loops,substring,Javascript,String,Performance,Loops,Substring,有一个javascript字符串变量源 找到长度为20的所有重复子串的最简单方法是什么(可以,如果它们交叉,也可以,如果甚至满足21的子串,它们将在答案中重复两次,从0到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.substri

有一个javascript字符串变量源

找到长度为20的所有重复子串的最简单方法是什么(可以,如果它们交叉,也可以,如果甚至满足21的子串,它们将在答案中重复两次,从0到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));
        }
    }
}
var len=20;
var sourceLen=source.length;
对于(var i=0;i
此外,我还考虑使用.indexOf,只使用一个for循环就可以得到相同的结果

indexOf
仍然在内部循环字符串。当然,我们不知道他们是否实现了;这可能值得一试

有没有更聪明的方法来获取字符串中长度为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));
函数重复(源、len、回调){
var子集={};
对于(变量i=0,l=source.length-len;i