标签:const 后缀 JavaScript len else 算法 str return hasSortArr
//查找 function find(str,hasSortArr,callback) { let l=0,r=hasSortArr.length; let index=-1; if(hasSortArr.length>0){ const ri=callback(str,hasSortArr[r-1]); if(ri===1){ return [r,-1] }else if(ri===0){ return [r-1,r-1] }else{ r=r-1; } const li=callback(str,hasSortArr[0]); if(li===-1){ return [0,-1] }else if(li===0){ return [0,0] }else{ l=l+1; } while(r-l>0){ const m=(l+r)>>1; //比较下坐标大小 const order=callback(str,hasSortArr[m]) if(order===1){ l=Math.max(l+1,m) }else if(order===-1){ r=Math.min(r-1,m) }else{ l=r=m; index=m; } } } return [(l+r)>>1,index] } //SA[i]表示排名为i的后缀下标、rk[i]表示起始位置的下标为i的后缀的排名 function getSa(str) { const sLen=str.length;//总共排名长度 //排名函数 const compare=function (n1,n2) { let dis=0; let len=0; while (dis===0){ //超过字符,返回小于 if(n1+len===sLen){ dis=-1 }else if(str[n1+len]>str[n2+len]){ dis=1; }else if(str[n1+len]<str[n2+len]){ dis=-1; }else{ len++; } } return dis; }; //后缀数组 const sa=[]; for(let i=0;i<sLen;i++){ const [n,index]=find(i,sa,compare) sa.splice(n,0,i) } return sa } //SA[i]表示排名为i的后缀下标 const sa=getSa('123123'); console.log(sa);//=>[ 3, 0, 4, 1, 5, 2 ]
标签:const,后缀,JavaScript,len,else,算法,str,return,hasSortArr 来源: https://www.cnblogs.com/caoke/p/13245999.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。