# Maximum segment value after putting k breakpoints in a number

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 = 2Output :Maximum number = 87Explanation :We need to two breakpoints. After putting the breakpoints, we get following options 8 75 4875 4 The maximum segment value is 87.Input :s = "999", k = 1Output :Maximum Segment Value = 99Explanation :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 Number` `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 = ` `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 Function` `int` `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 Code` `if` `__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 Number` `function` `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 Code` `let s = ` `"8754"` `let k = 2` `document.writea(` `"Maximum number = "` `,findMaxSegment(s, k))` `// This code is contributed by shinjanpatra` `</script>` |

**Output**

Maximum number = 87

**Time complexity : O(n) ****Auxiliary Space : O(1)**