Hash + 主席树.
给每种元素随机分配一个大权值,若两个区间内权值和相等,就可以认为它们在排序后是一样的.
现在可以允许排序后有一个位置不同.
以权值为下标建出主席树,二分出第一个不能匹配的权值 $x$ ,最后一个不能被匹配的权值 $y$ .
若 $x,y$ 是来自两个不同的子串,且 $[x,y]$ 内没有其它权值,说明排序后它们位置能对应上,两个子串就相似了.
可以记录一下每种权值的个数,方便判断.
时间复杂度 $O(n\log n)$ .
1 | //%std |
夢はここに 思い出は遠くに
Hash + 主席树.
给每种元素随机分配一个大权值,若两个区间内权值和相等,就可以认为它们在排序后是一样的.
现在可以允许排序后有一个位置不同.
以权值为下标建出主席树,二分出第一个不能匹配的权值 $x$ ,最后一个不能被匹配的权值 $y$ .
若 $x,y$ 是来自两个不同的子串,且 $[x,y]$ 内没有其它权值,说明排序后它们位置能对应上,两个子串就相似了.
可以记录一下每种权值的个数,方便判断.
时间复杂度 $O(n\log n)$ .
1 | //%std |