Given a large number as string s and an integer k which denotes the number of breakpoints we must put in the number k <= string length. The task is to find maximum segment value after putting exactly k breakpoints.
Examples:
Input : s = "8754", k = 2 Output : Maximum number = 87 Explanation : We need to two breakpoints. After putting the breakpoints, we get following options 8 75 4 87 5 4 The maximum segment value is 87. Input : s = "999", k = 1 Output : Maximum Segment Value = 99 Explanation : We need to one breakpoint. After putting the breakpoint, we either get 99,9 or 9,99.
One important observation is, the maximum would always be of length “string-length – k” which is the maximum value of any segment. Considering the fact, problem becomes like sliding window problem means we need to find maximum of all substrings of size (string-length – k).
Implementation:
C++
// CPP program to find the maximum segment// value after putting k breaks.#include <bits/stdc++.h>using namespace std;// Function to Find Maximum Numberint findMaxSegment(string &s, int k) { // Maximum segment length int seg_len = s.length() - k; // Find value of first segment of seg_len int res = 0; for (int i=0; i<seg_len; i++) res = res * 10 + (s[i] - '0'); // Find value of remaining segments using sliding // window int seg_len_pow = pow(10, seg_len-1); int curr_val = res; for (int i = 1; i <= (s.length() - seg_len); i++) { // To find value of current segment, first remove // leading digit from previous value curr_val = curr_val - (s[i-1]- '0')*seg_len_pow; // Then add trailing digit curr_val = curr_val*10 + (s[i+seg_len-1]- '0'); res = max(res, curr_val); } return res;}// Driver's Functionint main() { string s = "8754"; int k = 2; cout << "Maximum number = " << findMaxSegment(s, k); return 0;} |
Java
// Java program to find the maximum segment// value after putting k breaks.class GFG { // Function to Find Maximum Number static int findMaxSegment(String s, int k) { // Maximum segment length int seg_len = s.length() - k; // Find value of first segment of seg_len int res = 0; for (int i = 0; i < seg_len; i++) res = res * 10 + (s.charAt(i) - '0'); // Find value of remaining segments using // sliding window int seg_len_pow = (int)Math.pow(10, seg_len - 1); int curr_val = res; for (int i = 1; i <= (s.length() - seg_len); i++) { // To find value of current segment, // first remove leading digit from // previous value curr_val = curr_val - (s.charAt(i - 1) - '0') * seg_len_pow; // Then add trailing digit curr_val = curr_val * 10 + (s.charAt(i + seg_len - 1) - '0'); res = Math.max(res, curr_val); } return res; } // Driver code public static void main(String[] args) { String s = "8754"; int k = 2; System.out.print("Maximum number = " + findMaxSegment(s, k)); }}// This code is contributed by Anant Agarwal. |
Python3
# Python3 program to find the maximum segment # value after putting k breaks. # Function to Find Maximum Number def findMaxSegment(s, k): # Maximum segment length seg_len = len(s) - k # Find value of first segment of seg_len res = 0 for i in range(seg_len): res = res * 10 + (ord(s[i]) - ord('0')) # Find value of remaining segments # using sliding window seg_len_pow = pow(10, seg_len - 1) curr_val = res for i in range(1, len(s) - seg_len): # To find value of current segment, # first remove leading digit from # previous value curr_val = curr_val - (ord(s[i - 1])- ord('0')) * seg_len_pow # Then add trailing digit curr_val = (curr_val * 10 + (ord(s[i + seg_len - 1]) - ord('0'))) res = max(res, curr_val) return res# Driver Codeif __name__ == '__main__': s = "8754" k = 2 print("Maximum number = ", findMaxSegment(s, k))# This code is contributed by PranchalK |
C#
// C# program to find the maximum segment// value after putting k breaks.using System;class GFG { // Function to Find Maximum Number static int findMaxSegment(string s, int k) { // Maximum segment length int seg_len = s.Length - k; // Find value of first segment of seg_len int res = 0; for (int i = 0; i < seg_len; i++) res = res * 10 + (s[i] - '0'); // Find value of remaining segments using // sliding window int seg_len_pow = (int)Math.Pow(10, seg_len - 1); int curr_val = res; for (int i = 1; i <= (s.Length- seg_len); i++) { // To find value of current segment, // first remove leading digit from // previous value curr_val = curr_val - (s[i - 1] - '0') * seg_len_pow; // Then add trailing digit curr_val = curr_val * 10 + (s[i + seg_len - 1] - '0'); res = Math.Max(res, curr_val); } return res; } // Driver code public static void Main() { String s = "8754"; int k = 2; Console.WriteLine("Maximum number = " + findMaxSegment(s, k)); }}// This code is contributed by vt_m. |
Javascript
<script>// JavaScript program to find the maximum segment// value after putting k breaks.// Function to Find Maximum Numberfunction findMaxSegment(s, k){ // Maximum segment length let seg_len = s.length - k // Find value of first segment of seg_len let res = 0 for(let i=0;i<seg_len;i++) res = res * 10 + (s.charCodeAt(i) - '0'.charCodeAt(0)) // Find value of remaining segments // using sliding window let seg_len_pow = Math.pow(10, seg_len - 1) let curr_val = res for(let i = 1;i< s.length - seg_len;i++){ // To find value of current segment, // first remove leading digit from // previous value curr_val = curr_val - (s.charCodeAt(i - 1)-'0'.charCodeAt(0)) * seg_len_pow // Then add trailing digit curr_val = (curr_val * 10 + (s.charCodeAt(i + seg_len - 1) - '0'.charCodeAt(0))) res = Math.max(res, curr_val) } return res}// Driver Codelet s = "8754"let k = 2document.writea("Maximum number = ",findMaxSegment(s, k))// This code is contributed by shinjanpatra</script> |
Maximum number = 87
Time complexity : O(K)
Auxiliary Space : O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Here you can find 99610 more Info on that Topic: geeksforgeeks.org/maximum-segment-value-after-putting-k-breakpoints-in-a-number/ […]
… [Trackback]
[…] Information to that Topic: geeksforgeeks.org/maximum-segment-value-after-putting-k-breakpoints-in-a-number/ […]
… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/maximum-segment-value-after-putting-k-breakpoints-in-a-number/ […]
… [Trackback]
[…] There you will find 54992 additional Info on that Topic: geeksforgeeks.org/maximum-segment-value-after-putting-k-breakpoints-in-a-number/ […]