问题描述:
有一个长度为N的字符串,若一个连续子序列的和是K的倍数时,则被称之为幸运数列,求该字符串中幸运数列的个数。
问题解答:
对于此问题,首先求出序列的前缀和 s[i]
s[i]表示从0开始 到第i个位置,该前缀的和(i<=n)
前缀和的算法时间复杂度为O(n)。由于要求子序列和为K的整数倍,将问题转化为 s[i] - s[j] = t*k (t = 1,2,3,4.... i < j)
在此 s[i] % K,则 s[i] - s[j] = 0 即该序列(i~j)为幸运数列,对此进行hash。最后求出总数。