Find the Substring with maximum product
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 <bits/stdc++.h> 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
<script> // Javascript program to find the // maximum product subString // Function to return the value of a character function value(x) { return (x.charCodeAt() - 'a' .charCodeAt()); } // Function to find the maximum product subString function maximumProduct(str, n) { // To store subStrings let answer = "" , curr = "" ; let maxProduct = 0, product = 1; for (let i = 0; i < n; i++) { product *= (1 * 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 let str = "sdtfakdhdahdzz" ; let n = str.length; // Function call document.write(maximumProduct(str, n) + "<br/>" ); </script> |
Output:
hdzz
Time Complexity: O(N)
Auxiliary Space: O(1)
Please Login to comment...