Encuentre la substring con el producto máximo

Dada la string str que contiene solo alfabetos ingleses en minúsculas de tamaño N , la tarea es encontrar la substring que tiene el producto máximo. 
 

Cada alfabeto inglés tiene un valor tal que val(‘a’) = 0, val(‘b’) = 1, val(‘c’) = 2, ……, val(‘z’) = 25 .

Ejemplos: 
 

Entrada: str = “sdtfakdhdahdzz” 
Salida: hdzz 
Aquí, el producto máximo es para la substring “hdzz”. 
producto = 7 * 3 * 25 * 25 = 13125
Entrada: str = “geeksforgeeks” 
Salida: geeksforgeeks 
 

Acercarse: 
 

  • Primero, recorra la string dada mientras mantiene un valor de producto máximo.
  • El producto siempre seguirá aumentando o permanecerá constante a menos que encontremos una ‘a’ . Por lo tanto, comience una nueva substring después de cada aparición de ‘a’ .
  • Además, junto con el valor del producto máximo, también mantendremos la substring a la que corresponde el producto máximo.
  • Una vez recorrida toda la string, imprima la substring correspondiente al producto máximo.

A continuación se muestra la implementación del enfoque anterior: 
 

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>
Producción: 

hdzz

 

Complejidad de tiempo: O(N)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por muskan_garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *