子串分值和
n有十万,需要找规律,O(n^2)不满足要求
分析样例:
Ababc
01234
长度是n=5
索引下标-对应字符
0A贡献 1+1=2 a;ab;---2=2*1 next a 2; pre a -1
1b贡献 1+1=2 b;ba;---4=2*2 next b 3; pre b -1
2a贡献 1+1+1=3 a;ab;abc; ---9=3*3 next a 没有 5;pre a 0
3b贡献 1+1=2 b;bc; 8=2*4 next b 没有 5;pre b 1
4c贡献 1=1 c----1*5 next c 没有 5;pre c -1
字符位置i+1 * 字符贡献长度 求和
对于i处的字符s[i],
上一个s[i]出现位置p[s[i]]
i-p[s[i]] 贡献次数 n[s[i]]-i
ababc
28
A,ab,aba,abab,ababc;
B,ba,bab,babc;
A,ab,abc;
B,bc;
c
因此,需要记录i处字符a[i]的next和pre数组,初始化pre为-1,next为字符串长度。
next[i]表示s[i]的下一处下标索引
Next[i]记录s[i]的下一处,pre[i]记录s[i]的下一处,
如何记录
遍历s[i]
如何更新next[i],
对于得到的s[i],ii=s[i],next[ii]=i,下一个位置就是当前位置
res+=(next[ii]-i)*(i-pre[ii])// next[ii]=I,,此处加的都是0,错误的
Pre[ii]=I;
Next[ii]未知
如何更新pre[i]