Related Articles
Count number of substrings with numeric value greater than X
• Difficulty Level : Basic
• Last Updated : 13 Nov, 2018

Given a string ‘S’ (composed of digits) and an integer ‘X”, the task is to count all the sub-strings of ‘S’ that satisfy the following conditions:

• The sub-string must not begin with the digit ‘0’.
• And the numeric number it represents must be greater than ‘X’.

Note: Two ways of selecting a sub-string are different if they begin or end at different indices.

Examples:

```Input: S = "471", X = 47
Output: 2
Only the sub-strings "471" and "71"
satisfy the given conditions.

Input: S = "2222", X = 97
Output: 3
Valid strings are "222", "222" and "2222".
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Iterate over each digit of the string ‘S’ and choose the digits which are greater than ‘0’.
• Now, take all possible sub-strings starting from the character chosen in the previous step and convert each sub-string to integer.
• Compare the integer from previous step to ‘X’, if the number is greater than ‘X’ then increment the count variable.
• Finally, print the value of the count variable.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;`` ` `// Function that counts``// valid sub-strings``int` `count(string S, ``int` `X)``{``    ``int` `count = 0;``    ``const` `int` `N = S.length();``    ``for` `(``int` `i = 0; i < N; ++i) {`` ` `        ``// Only take those numbers``        ``// that do not start with '0'.``        ``if` `(S[i] != ``'0'``) {``            ``for` `(``int` `len = 1; (i + len) <= N; ++len) {`` ` `                ``// converting the sub-string``                ``// starting from index 'i'``                ``// and having length 'len' to int``                ``// and checking if it is greater``                ``// than X or not``                ``if` `(stoi(S.substr(i, len)) > X)``                    ``count++;``            ``}``        ``}``    ``}``    ``return` `count;``}`` ` `// Driver code``int` `main()``{`` ` `    ``string S = ``"2222"``;``    ``int` `X = 97;``    ``cout << count(S, X);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``import` `java.util.*;`` ` `class` `GFG``{``// Function that counts``// valid sub-strings``static` `int` `count(String S, ``int` `X)``{``    ``int` `count = ``0``;``    ``int` `N = S.length();``    ``for` `(``int` `i = ``0``; i < N; ++i)``    ``{`` ` `        ``// Only take those numbers``        ``// that do not start with '0'.``        ``if` `(S.charAt(i) != ``'0'``)``        ``{``            ``for` `(``int` `len = ``1``; ``                ``(i + len) <= N; ++len) ``            ``{`` ` `                ``// converting the sub-string``                ``// starting from index 'i'``                ``// and having length 'len' to ``                ``// int and checking if it is ``                ``// greater than X or not``                ``int` `num = Integer.parseInt(S.substring(i, i + len));``                ``if` `(num > X)``                    ``count++;``            ``}``        ``}``    ``}``    ``return` `count;``}`` ` `// Driver code``public` `static` `void` `main(String []args)``{``    ``String S = ``"2222"``;``    ``int` `X = ``97``;``    ``System.out.println(count(S, X));``}``}`` ` `// This code is contributed by ihritik`

## Python3

 `# Python3 implementation of``# the approach`` ` `# Function that counts``# valid sub-strings``def` `countSubStr(S, X):`` ` `    ``cnt ``=` `0``    ``N ``=` `len``(S)``     ` `    ``for` `i ``in` `range``(``0``, N):`` ` `        ``# Only take those numbers``        ``# that do not start with '0'.``        ``if` `(S[i] !``=` `'0'``):``             ` `            ``j ``=` `1``            ``while``((j ``+` `i) <``=` `N):`` ` `                ``# converting the sub-string``                ``# starting from index 'i'``                ``# and having length 'len' to ``                ``# int and checking if it is ``                ``# greater than X or not``                ``num ``=` `int``(S[i : i ``+` `j])``             ` `                ``if` `(num > X):``                    ``cnt ``=` `cnt ``+` `1``                 ` `                ``j ``=` `j ``+` `1``         ` `    ``return` `cnt;`` ` `# Driver code``S ``=` `"2222"``;``X ``=` `97``;``print``(countSubStr(S, X))`` ` `# This code is contributed by ihritik`

## C#

 `// C# implementation of the approach``using` `System;`` ` `class` `GFG``{``// Function that counts``// valid sub-strings``static` `int` `count(``string` `S, ``int` `X)``{``    ``int` `count = 0;``    ``int` `N = S.Length;``    ``for` `(``int` `i = 0; i < N; ++i) ``    ``{`` ` `        ``// Only take those numbers``        ``// that do not start with '0'.``        ``if` `(S[i] != ``'0'``) ``        ``{``            ``for` `(``int` `len = 1; ``                ``(i + len) <= N; ++len) ``            ``{`` ` `                ``// converting the sub-string``                ``// starting from index 'i'``                ``// and having length 'len' to int``                ``// and checking if it is greater``                ``// than X or not``                ``int` `num = Int32.Parse(S.Substring(i, len));``                ``if` `(num > X)``                    ``count++;``            ``}``        ``}``    ``}``    ``return` `count;``}`` ` `// Driver code``public` `static` `void` `Main(String []args)``{``    ``string` `S = ``"2222"``;``    ``int` `X = 97;``    ``Console.WriteLine(count(S, X));``}``}`` ` `// This code is contributed by ihritik`

## PHP

 ` ``\$X``)``                    ``\$cnt``++;``            ``}``        ``}``    ``}``    ``return` `\$cnt``;``}`` ` `// Driver code``\$S` `= ``"2222"``;``\$X` `= 97;``echo` `countSubStr(``\$S``, ``\$X``);`` ` `// This code is contributed by ihritik``?>`
Output:
```3
```

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.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live and Geeks Classes Live USA

My Personal Notes arrow_drop_up