给定一个字符串,求该字符串含有的本质不同的子串数量。(|S|≤2·104)
题解
每个子串都是原字符串后缀的前缀,考虑任意一个后缀suffix(i),对子串的贡献为len−i+1。在后缀数组中height(i)表示排名第i小和第i-1小的后缀的最长公共前缀,其产生的贡献即为height(i),减去这部分即可。
代码
1 |
|
Success and failure are temporary.
给定一个字符串,求该字符串含有的本质不同的子串数量。(|S|≤2·104)
每个子串都是原字符串后缀的前缀,考虑任意一个后缀suffix(i),对子串的贡献为len−i+1。在后缀数组中height(i)表示排名第i小和第i-1小的后缀的最长公共前缀,其产生的贡献即为height(i),减去这部分即可。
1 | #include<bits/stdc++.h> |