Related Articles
Find the Substring with maximum product
• Difficulty Level : Easy
• Last Updated : 09 May, 2020

Given a 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

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

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`
Output:
```hdzz
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up