# Program to count number of ways we can make a list of values by splitting numeric string in Python

PythonServer Side ProgrammingProgramming

Suppose we have a strings s. The s is containing digits from 0 - 9 and we also have another number k. We have to find the number of different ways that s can be represented as a list of numbers from [1, k]. If the answer is very large then return result mod 10^9 + 7.

So, if the input is like s = "3456" k = 500, then the output will be 7, as we can represent s like [3, 4, 5, 6], [34, 5, 6], [3, 4, 56], [3, 45, 6], [34, 56], [345, 6], [3, 456]

To solve this, we will follow these steps −

• m := 10^9 + 7

• N := size of s

• dp := a list of size (N + 1) and fill with 0

• dp[N] := 1

• for i in range N − 1 to 0, decrease by 1, do

• curr_val := 0

• for j in range i to N, do

• curr_val := curr_val * 10 + (s[j] as number)

• if curr_val in range 1 through k, then

• dp[i] :=(dp[i] + dp[j + 1]) mod m

• otherwise,

• come out from the loop

• return dp[0]

Let us see the following implementation to get better understanding −

## Example

Live Demo

class Solution:
def solve(self, s, k):
m = 10 ** 9 + 7
N = len(s)
dp = [0] * (N + 1)
dp[N] = 1
for i in range(N − 1, −1, −1):
curr_val = 0
for j in range(i, N):
curr_val = curr_val * 10 + int(s[j])
if 1 <= curr_val <= k:
dp[i] = (dp[i] + dp[j + 1]) % m
else:
break
return dp[0]
ob = Solution()
s = "3456"
k = 500
print(ob.solve(s, k))

## Input

"3456", 500

## Output

7
Published on 26-Dec-2020 10:49:43