Given a string consisting of integers 0 to 9. The task is to count the number of substrings which when convert into integer are divisible by 6. Substring does not contain leading zeroes.
Input : s = "606". Output : 5 Substrings "6", "0", "6", "60", "606" are divisible by 6. Input : s = "4806". Output : 5 "0", "6", "48", "480", "4806" are substring which are divisible by 6.
Method 2:(Dynamic Programming) As discussed in Check if a large number is divisible by 6 or not. A number is divisible by 6 if last digit is divisible by 2 and sum of digits is divisible by 3.
The idea is to use Dynamic Programming, which enables us to compute answer quickly and efficiently by tracking previously computed answers and using these stored answer instead of recomputing values.
Let f(i, m) be the number of strings starting at index i and sum of their digits modulo 3 (so far) is m and number it represents is even. So, our answer would be
Let x be the ith digit in the string. From f(i, m) we need to find all the even substrings that start in i + 1.
Also, we will get an extra substring if (x + m) itself is divisible by 3 and x is even. So, we get recurrence relation
// We initially pass m (sum modulo 3 so far) as 0 f(i, m) = ((x + m)%3 == 0 and x%2 == 0) + f(i + 1, (m + x)%3) // Recursive
By memorizing the states, we get O(n) solution.
Below is implementation of this approach:
Time Complexity: O(n).
This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Number of substrings divisible by 4 in a string of integers
- Number of substrings with length divisible by the number of 1's in it
- Number of substrings divisible by 8 but not by 3
- Find number of substrings of length k whose sum of ASCII value of characters is divisible by k
- Number of integers in a range [L, R] which are divisible by exactly K of it's digits
- Median in a stream of integers (running integers)
- Mode in a stream of integers (running integers)
- Lexicographically smallest permutation of size A having B integers exceeding all preceeding integers
- Count the number of pairs (i, j) such that either arr[i] is divisible by arr[j] or arr[j] is divisible by arr[i]
- Generate a string whose all K-size substrings can be concatenated to form the given string
- Lexicographically smallest permutation of a string that contains all substrings of another string
- Count of m digit integers that are divisible by an integer n
- Ways to form an array having integers in given range such that total sum is divisible by 2
- Count integers in a range which are divisible by their euler totient value
- Sum of last digit of all integers from 1 to N divisible by M
- Count integers in the range [A, B] that are not divisible by C and D
- Given a binary string, count number of substrings that start and end with 1.
- Sum of all substrings of a string representing a number | Set 1
- Number of even substrings in a string of digits
- Sum of all substrings of a string representing a number | Set 2 (Constant Extra Space)