Maximum segment value after putting k breakpoints in a number in C++


In this problem, we are given a string that denotes a large number and an integer k roar denotes the number of breakpoints. Our task is to create a program that will find the maximum segment value after putting L breakpoints in a number.

Here, we have to find the maximum number that can be generated after putting k breakpoint in the number given by the string.

Let's take an example to understand the problem

Input − string = “45972”, k = 3

Output − 97

Explanation

All possible number is:
45    9    7    2
4    59    7    2
4    5    97    2
4    5    9    72
From all 97 is the largest number.

To solve this problem, we will use the sliding window. Here, the window size will be equal to (length of string - k) i.e. the maximum number will of this size. We will check for the maximum number form all the possible numbers of the given size using the sliding window technique.

Example

Program to find the maximum segment value after putting K breakpoints in a number −

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int findMaxSegmentWithKbreaks(string &s, int k) {
   int window = s.length() - k;
   int MaxNumber = 0;
   for (int i=0; i<window; i++)
   MaxNumber = MaxNumber * 10 + (s[i] - '0');
   int slWindow = pow(10, window-1);
   int value = MaxNumber;
   for (int i = 1; i <= (s.length() - window); i++) {
      value = value - (s[i-1]- '0')*slWindow;
      value = value*10 + (s[i+window-1]- '0');
      MaxNumber = max(MaxNumber, value);
   }
   return MaxNumber;
}
int main() {
   string s = "45972";
   int k = 3;
   cout<<"Maximum segment value after putting "<<k<<" break points in a number = "<<findMaxSegmentWithKbreaks(s, k);
   return 0;
}

Output

Maximum segment value after putting 3 breakpoints in a number = 97

Updated on: 03-Jun-2020

171 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements