传送门 :
思路结论 : 当前 字符 在该子串中的贡献为 ( i − p r e [ i ] ) ∗ ( n x t [ i ] − i ) (i-pre[i])*(nxt[i]-i) (i−pre[i])∗(nxt[i]−i)
解释 :
对于当前 以 i i i开头的子串,最多可以构造出 ( n x t [ i ] − i ) (nxt[i] - i) (nxt[i]−i)的串
例如 : 2 , 3 , 4 , 5 2,3,4,5 2,3,4,5
当前 i = 2 , n x t [ i ] = 5 i=2,nxt[i]=5 i=2,nxt[i]=5则可以构造出 5 − 2 = 3 5-2=3 5−2=3个子串 2 2 2 2 , 3 2,3 2,3 2 , 3 , 4 2,3,4 2,3,4
因此在于前面的数 根据乘法原理即可得上面的表达式
因此问题转换为 **求 n x t [ i ] nxt[i] nxt[i]和 p r e [ i ] pre[i] pre[i]**即可
我们只需要 O n On On的遍历即可
Mycodeconst int N = 1e5+10;
int pre[N];
int nxt[N];
int last[N];
void solve(){
string s;cin>>s;
memset(last,-1,sizeof last);
for(int i = 0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?