有效地计算可被k整除的数字串的子串数?

时间:2016-02-22 14:16:07

标签: string algorithm time-complexity big-o

我们得到一个由数字0-9组成的字符串。我们必须计算可被数字k整除的子字符串数。一种方法是生成所有子字符串并检查它是否可被k整除,但这将花费O(n^2)时间。我想在O(n*k)时间内解决这个问题。

1 <= n <= 100000 and 2 <= k <= 1000.

我看到了类似的问题here。但在这个问题上,k被固定为4。所以,我使用了4的可分性属性来解决问题。 以下是我对该问题的解决方案:

int main()
{
    string s;
    vector<int> v[5];
    int i;
    int x;
    long long int cnt = 0;

    cin>>s;
    x = 0;
    for(i = 0; i < s.size(); i++) {
        if((s[i]-'0') % 4 == 0) {
            cnt++;
        }
    }
    for(i = 1; i < s.size(); i++) {
        int f = s[i-1]-'0';
        int s1 = s[i] - '0';
        if((10*f+s1)%4 == 0) {
            cnt = cnt + (long long)(i);
        }
    }
    cout<<cnt;

}

但我想要任何k值的通用算法。

0 个答案:

没有答案