Javascript 最长的重复子字符串

Javascript 最长的重复子字符串,javascript,string,longest-substring,Javascript,String,Longest Substring,我有一个程序可以找到输入字符串中最长的重复子字符串,但问题是,当答案中有两个最大长度的重复子字符串时,我只能得到其中一个 例如,对于字符串123b456k123m456j,答案是123,而答案是123和456 我能解决这个问题吗?如果你知道怎么做,请回答我的问题 let s=prompt('Enter string'); 函数substr(str、begin、end){ 让结果=”; for(让i=begin;i

我有一个程序可以找到输入字符串中最长的重复子字符串,但问题是,当答案中有两个最大长度的重复子字符串时,我只能得到其中一个

例如,对于字符串123b456k123m456j,答案是123,而答案是123和456

我能解决这个问题吗?如果你知道怎么做,请回答我的问题

let s=prompt('Enter string');
函数substr(str、begin、end){
让结果=”;
for(让i=begin;iresult.length){
结果=p;
}
}
返回结果;
}

警报(lrs)尝试用以下内容替换功能Los

function lrs(str) {
const suffixes = [];
for (let i = 0; i < str.length; i++) {
    suffixes.push(substr(str, i, str.length));
}

suffixes.sort();

let result = [];
let res = [];
let lastLongestSubStrLen = 0;
for (let i = 0; i < str.length - 1; i++) {
    const p = lcp(suffixes[i], suffixes[i + 1]);
    if (lastLongestSubStrLen <= p.length) {
        result.push(p);
        lastLongestSubStrLen = p.length;
        continue;
    }
}
return result;
功能lrs(str){
常量后缀=[];
for(设i=0;i

const lrs=(s)=>s.match(/(.+)(?=.*\1)/g)
.filter((x,u,a)=>!a.some((y)=>x.lengthconsole.log(lrs('123b456k123m456j');
我真的很喜欢这种基于regexp的方法(+1)!但在使用它之后,我发现它将失败,并使用以下字符串:“123456k123m3456j”。它将返回[“123”,“456”]。(我更正了我原来的评论。)这看起来有点吓人。谢谢你的回答!@cars10m为我的回答添加了一个更新。哇,你已经得到了我的支持票-非常令人印象深刻!谢谢。我会考虑你所有的建议。效果非常好!非常感谢!