超简单的求后缀数组算法-JavaScript
2021-04-27 04:26
标签:str sso console 排名函数 min max javascrip 位置 script 超简单的求后缀数组算法-JavaScript 标签:str sso console 排名函数 min max javascrip 位置 script 原文地址:https://www.cnblogs.com/caoke/p/13245999.html//查找
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]
文章标题:超简单的求后缀数组算法-JavaScript
文章链接:http://soscw.com/index.php/essay/79972.html