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