数据结构
childern 是一个256位的node数组,start是连接这个节点的边start的index,end是结尾的index,因为所有的叶子节点的end会根据输入pos一直变化都string parse完毕,所以每个叶子的节点的end需要是一个存int的object。
全局变量
remainingSuffixCount 表示还需要处理的suffix,每次开始遍历一个字母的时候都需要把这个数加一,在处理完毕之后需要减1,不是每次遍历都需要处理,
activeEdge 也是 如果不需要回溯,activeEdge = 当前pos 否则 pos - remainingSuffixCount + 1
public class NSInteger{
int value;
public NSInteger(int i){
value = i;
}
}
public class Node{
Node[] children;
Node suffixLink;
int start;
NSInteger end;
int suffixIndex;
}
遍历是从头开始的,而不是从最后一个,每次遍历的原则是如果这个字母是从root开始没有出现过,是一个新的字母就创建一个新的leaf node,例如abcabxabcd前面三个遍历完的情况如下,下面遍历第四个字母a和第五个字母b,因为从root开始遍历
没有评论:
发表评论