# Minimum number of sets with numbers less than Y

Given a string of consecutive digits and a number Y, the task is to find the number of minimum sets such that every set follows the below rule:

1. Set should contain consecutive numbers
2. No digit can be used more than once.
3. The number in the set should not be more than Y.

Examples:

```Input: s = "1234", Y = 30
Output: 3

Three sets of {12, 3, 4}

Input: s = "1234", Y = 4
Output: 4
Four sets of {1}, {2}, {3}, {4}
```

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

Approach: The following problem can be solved using a greedy approach whose steps are given below:

• Iterate in the string, and concatenate the number to a variable(let say num) using num*10 + (s[i]-‘0’)
• If the number is not greater than Y, then mark f = 1.
• If the number exceeds Y, then increase count if f = 1 and re-initialize f as 0 and also initialise num as s[i]-‘0’ or num as 0.
• After iterating in the string completely, then increase count if f is 1.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the minimum number ` `// sets with consecutive numbers and less than Y ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find the minimum number of shets ` `int` `minimumSets(string s, ``int` `y) ` `{ ` ` `  `    ``// Variable to count ` `    ``// the number of sets ` `    ``int` `cnt = 0; ` `    ``int` `num = 0; ` ` `  `    ``int` `l = s.length(); ` `    ``int` `f = 0; ` ` `  `    ``// Iterate in the string ` `    ``for` `(``int` `i = 0; i < l; i++) { ` ` `  `        ``// Add the number to string ` `        ``num = num * 10 + (s[i] - ``'0'``); ` ` `  `        ``// Mark that we got a number ` `        ``if` `(num <= y) ` `            ``f = 1; ` `        ``else` `// Every time it exceeds ` `        ``{ ` ` `  `            ``// Check if previous was ` `            ``// anytime  less than Y ` `            ``if` `(f) ` `                ``cnt += 1; ` ` `  `            ``// Current number ` `            ``num = s[i] - ``'0'``; ` `            ``f = 0; ` ` `  `            ``// Check for current number ` `            ``if` `(num <= y) ` `                ``f = 1; ` `            ``else` `                ``num = 0; ` `        ``} ` `    ``} ` ` `  `    ``// Check for last added number ` `    ``if` `(f) ` `        ``cnt += 1; ` ` `  `    ``return` `cnt; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``string s = ``"1234"``; ` `    ``int` `y = 30; ` `    ``cout << minimumSets(s, y); ` ` `  ` ``return` `0; ` `} `

## Java

 `// Java program to find the minimum number ` `// sets with consecutive numbers and less than Y ` `import` `java.util.*; ` ` `  `class` `solution ` `{ ` ` `  `// Function to find the minimum number of shets ` `static` `int` `minimumSets(String s, ``int` `y) ` `{ ` ` `  `    ``// Variable to count ` `    ``// the number of sets ` `    ``int` `cnt = ``0``; ` `    ``int` `num = ``0``; ` ` `  `    ``int` `l = s.length(); ` `    ``boolean` `f = ``false``; ` ` `  `    ``// Iterate in the string ` `    ``for` `(``int` `i = ``0``; i < l; i++) { ` ` `  `        ``// Add the number to string ` `        ``num = num * ``10` `+ (s.charAt(i) - ``'0'``); ` ` `  `        ``// Mark that we got a number ` `        ``if` `(num <= y) ` `            ``f = ``true``; ` `        ``else` `// Every time it exceeds ` `        ``{ ` ` `  `            ``// Check if previous was ` `            ``// anytime less than Y ` `            ``if` `(f) ` `                ``cnt += ``1``; ` ` `  `            ``// Current number ` `            ``num = s.charAt(i) - ``'0'``; ` `            ``f = ``false``; ` ` `  `            ``// Check for current number ` `            ``if` `(num <= y) ` `                ``f = ``true``; ` `            ``else` `                ``num = ``0``; ` `        ``} ` `    ``} ` ` `  `    ``// Check for last added number ` `    ``if` `(f == ``true``) ` `        ``cnt += ``1``; ` ` `  `    ``return` `cnt; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``String s = ``"1234"``; ` `    ``int` `y = ``30``; ` `    ``System.out.println(minimumSets(s, y)); ` `} ` `} ` `// This code is contributed by ` `// Shashank_Sharma `

## Python3

 `# Python3 program to find the minimum number ` `# sets with consecutive numbers and less than Y ` `import` `math as mt ` ` `  `# Function to find the minimum number of shets ` `def` `minimumSets(s, y): ` `     `  `    ``# Variable to count the number of sets ` `    ``cnt ``=` `0` `    ``num ``=` `0` ` `  `    ``l ``=` `len``(s) ` `    ``f ``=` `0` ` `  `    ``# Iterate in the string ` `    ``for` `i ``in` `range``(l): ` `         `  `        ``# Add the number to string ` `        ``num ``=` `num ``*` `10` `+` `(``ord``(s[i]) ``-` `ord``(``'0'``)) ` ` `  `        ``# Mark that we got a number ` `        ``if` `(num <``=` `y): ` `            ``f ``=` `1` `        ``else``: ``# Every time it exceeds ` ` `  `            ``# Check if previous was anytime ` `            ``# less than Y ` `            ``if` `(f): ` `                ``cnt ``+``=` `1` ` `  `            ``# Current number ` `            ``num ``=` `ord``(s[i]) ``-` `ord``(``'0'``) ` `            ``f ``=` `0` ` `  `            ``# Check for current number ` `            ``if` `(num <``=` `y): ` `                ``f ``=` `1` `            ``else``: ` `                ``num ``=` `0` `         `  `    ``# Check for last added number ` `    ``if` `(f): ` `        ``cnt ``+``=` `1` ` `  `    ``return` `cnt ` ` `  `# Driver Code ` `s ``=` `"1234"` `y ``=` `30` `print``(minimumSets(s, y)) ` ` `  `# This code is contributed by ` `# Mohit kumar 29 `

## C#

 `// C# program to find the minimum number  ` `// sets with consecutive numbers and less than Y  ` ` `  `using` `System; ` ` `  `class` `solution  ` `{  ` ` `  `// Function to find the minimum number of shets  ` `static` `int` `minimumSets(``string` `s, ``int` `y)  ` `{  ` ` `  `    ``// Variable to count  ` `    ``// the number of sets  ` `    ``int` `cnt = 0;  ` `    ``int` `num = 0;  ` ` `  `    ``int` `l = s.Length ;  ` `    ``bool` `f = ``false``;  ` ` `  `    ``// Iterate in the string  ` `    ``for` `(``int` `i = 0; i < l; i++) {  ` ` `  `        ``// Add the number to string  ` `        ``num = num * 10 + (s[i] - ``'0'``);  ` ` `  `        ``// Mark that we got a number  ` `        ``if` `(num <= y)  ` `            ``f = ``true``;  ` `        ``else` `// Every time it exceeds  ` `        ``{  ` ` `  `            ``// Check if previous was  ` `            ``// anytime less than Y  ` `            ``if` `(f)  ` `                ``cnt += 1;  ` ` `  `            ``// Current number  ` `            ``num = s[i] - ``'0'``;  ` `            ``f = ``false``;  ` ` `  `            ``// Check for current number  ` `            ``if` `(num <= y)  ` `                ``f = ``true``;  ` `            ``else` `                ``num = 0;  ` `        ``}  ` `    ``}  ` ` `  `    ``// Check for last added number  ` `    ``if` `(f == ``true``)  ` `        ``cnt += 1;  ` ` `  `    ``return` `cnt;  ` `}  ` ` `  `// Driver Code  ` `public` `static` `void` `Main()  ` `{  ` `    ``string` `s = ``"1234"``;  ` `    ``int` `y = 30; ` `     `  `    ``Console.WriteLine(minimumSets(s, y));  ` `}  ` `// This code is contributed by Ryuga ` ` `  `}  `

## PHP

 ` `

Output:

```3
```

My Personal Notes arrow_drop_up Striver(underscore)79 at Codechef and codeforces D

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.