对 i<ji<ji<j 比较 SiS_iSi 与 SjS_jSj:删除位置以前和位置 jjj 以后本来就相同,中间部分相等当且仅当原串的 Si,Si+1,…,SjS_i,S_{i+1},\ldots,S_jSi,Si+1,…,Sj 全部相同。
因此,一个合法位置对恰好是同一个相同字符连续段内任选两个位置。若某段长度为 lenlenlen,它贡献 (len2)=len(len−1)/2\binom{len}{2}=len(len-1)/2(2len)=len(len−1)/2 个位置对。
线性扫描字符串,遇到字符变化时结算上一段并开始新段,最后再结算末段即可。答案最大约为 N2/2N^2/2N2/2,需要使用 64 位整数。
时间复杂度为 O(N)O(N)O(N),空间复杂度为 O(1)O(1)O(1)。
注册一个 Hydro 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 Hydro 通用账户