有一个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的重复字符串列表?
答案 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));