 Open in App
Not now

# Find the Substring with maximum product

• Difficulty Level : Easy
• Last Updated : 18 Nov, 2021

Given string str containing only lowercase English alphabets of size N, the task is to find the substring having the maximum product.

Each English alphabet has a value such that val(‘a’) = 0, val(‘b’) = 1, val(‘c’) = 2, ……, val(‘z’) = 25.

Examples:

Input: str = “sdtfakdhdahdzz”
Output: hdzz
Here, the maximum product is for the substring “hdzz”.
product = 7 * 3 * 25 * 25 = 13125
Input: str = “geeksforgeeks”
Output: geeksforgeeks

Approach:

• First, traverse through the given string while maintaining a maximum product value.
• Product will always keep increasing or will remain constant unless we encounter an ‘a’. Hence, start a new substring after each ‘a’ occurrence.
• Also, along with the maximum product value, we will also maintain the substring to which the maximum product corresponds.
• Once the entire string has been traversed, print the substring corresponding to the maximum product.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the maximum product substring`   `#include ` `using` `namespace` `std;`   `// Function to return the value of a character` `int` `value(``char` `x)` `{` `    ``return` `(``int``)(x - ``'a'``);` `}`   `// Function to find the maximum product substring` `string maximumProduct(string str, ``int` `n)` `{` `    ``// To store substrings` `    ``string answer = ``""``, curr = ``""``;` `    ``long` `long` `maxProduct = 0, product = 1;`   `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``product *= 1LL * value(str[i]);`   `        ``curr += str[i];`   `        ``// Check if current product is maximum` `        ``// possible or not` `        ``if` `(product >= maxProduct) {` `            ``maxProduct = product;` `            ``answer = curr;` `        ``}`   `        ``// If product is 0` `        ``if` `(product == 0) {` `            ``product = 1;` `            ``curr = ``""``;` `        ``}` `    ``}`   `    ``// Return the substring with maximum product` `    ``return` `answer;` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"sdtfakdhdahdzz"``;`   `    ``int` `n = str.size();`   `    ``// Function call` `    ``cout << maximumProduct(str, n) << endl;`   `    ``return` `0;` `}`

## Java

 `// Java program to find the maximum product subString`   `class` `GFG{` ` `  `// Function to return the value of a character` `static` `int` `value(``char` `x)` `{` `    ``return` `(``int``)(x - ``'a'``);` `}` ` `  `// Function to find the maximum product subString` `static` `String maximumProduct(String str, ``int` `n)` `{` `    ``// To store subStrings` `    ``String answer = ``""``, curr = ``""``;` `    ``long` `maxProduct = ``0``, product = ``1``;` ` `  `    ``for` `(``int` `i = ``0``; i < n; i++) {` `        ``product *= 1L * value(str.charAt(i));` ` `  `        ``curr += str.charAt(i);` ` `  `        ``// Check if current product is maximum` `        ``// possible or not` `        ``if` `(product >= maxProduct) {` `            ``maxProduct = product;` `            ``answer = curr;` `        ``}` ` `  `        ``// If product is 0` `        ``if` `(product == ``0``) {` `            ``product = ``1``;` `            ``curr = ``""``;` `        ``}` `    ``}` ` `  `    ``// Return the subString with maximum product` `    ``return` `answer;` `}` ` `  `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``String str = ``"sdtfakdhdahdzz"``;` ` `  `    ``int` `n = str.length();` ` `  `    ``// Function call` `    ``System.out.print(maximumProduct(str, n) +``"\n"``);` ` `  `}` `}`   `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program to find the maximum product sub`   `# Function to return the value of a character` `def` `value(x):` `    ``return` `(``ord``(x) ``-` `ord``(``'a'``))`   `# Function to find the maximum product sub` `def` `maximumProduct(strr, n):`   `    ``# To store subs` `    ``answer ``=` `""` `    ``curr ``=` `""` `    ``maxProduct ``=` `0` `    ``product ``=` `1`   `    ``for` `i ``in` `range``(n):` `        ``product ``*``=``value(strr[i])`   `        ``curr ``+``=` `strr[i]`   `        ``# Check if current product is maximum` `        ``# possible or not` `        ``if` `(product >``=` `maxProduct):` `            ``maxProduct ``=` `product` `            ``answer ``=` `curr`   `        ``# If product is 0` `        ``if` `(product ``=``=` `0``):` `            ``product ``=` `1` `            ``curr ``=` `""`   `    ``# Return the sub with maximum product` `    ``return` `answer`   `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``strr ``=` `"sdtfakdhdahdzz"`   `    ``n ``=` `len``(strr)`   `    ``# Function call` `    ``print``(maximumProduct(strr, n))`   `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to find the maximum product subString`   `using` `System;`   `public` `class` `GFG{`   `// Function to return the value of a character` `static` `int` `value(``char` `x)` `{` `    ``return` `(``int``)(x - ``'a'``);` `}`   `// Function to find the maximum product subString` `static` `String maximumProduct(String str, ``int` `n)` `{` `    ``// To store subStrings` `    ``String answer = ``""``, curr = ``""``;` `    ``long` `maxProduct = 0, product = 1;`   `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``product *= 1L * value(str[i]);`   `        ``curr += str[i];`   `        ``// Check if current product is maximum` `        ``// possible or not` `        ``if` `(product >= maxProduct) {` `            ``maxProduct = product;` `            ``answer = curr;` `        ``}`   `        ``// If product is 0` `        ``if` `(product == 0) {` `            ``product = 1;` `            ``curr = ``""``;` `        ``}` `    ``}`   `    ``// Return the subString with maximum product` `    ``return` `answer;` `}`   `// Driver code` `public` `static` `void` `Main(String[] args)` `{` `    ``String str = ``"sdtfakdhdahdzz"``;`   `    ``int` `n = str.Length;`   `    ``// Function call` `    ``Console.Write(maximumProduct(str, n) +``"\n"``);`   `}` `}` `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output:

`hdzz`

Time Complexity: O(N)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles