Problème
Considérez chaque fenêtre contiguë de span chiffres et multipliez ses chiffres. Retournez le plus grand produit obtenu. Les zéros initiaux sont des chiffres ordinaires ; une fenêtre contenant un zéro a un produit nul. Ne réordonnez ni ne sautez aucun chiffre.
Implémentez largest_adjacent_digit_product(digits, span).
Entrée
digits : La séquence de chiffres, y compris les éventuels zéros initiaux.
span : Le nombre exact de chiffres adjacents dans une fenêtre.
Sortie
Retournez le plus grand produit parmi toutes les fenêtres de cette largeur.
Contraintes
1 ≤ longueur de la chaîne de chiffres ≤ 100 000. Les caractères sont 0…9. 1 ≤ span ≤ min(18, longueur). Tous les produits tiennent dans un entier signé 64 bits.
Exemples
Entrée :
span = 2
digits = "23405"
Sortie attendue :
expected = 12
Entrée :
long long span = 2;
std::string digits = "23405";
Sortie attendue :
long long expected = 12;
Entrée :
long span = 2;
string digits = "23405";
Sortie attendue :
long expected = 12;
Explication
Les fenêtres 23, 34, 40 et 05 ont pour produits 6, 12, 0 et 0. Le plus grand est 12.
Entrée :
span = 3
digits = "102"
Sortie attendue :
expected = 0
Entrée :
long long span = 3;
std::string digits = "102";
Sortie attendue :
long long expected = 0;
Entrée :
long span = 3;
string digits = "102";
Sortie attendue :
long expected = 0;
Explication
Il n'y a qu'une seule fenêtre de largeur trois. Elle contient un zéro, donc 1 × 0 × 2 = 0.
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Un zéro dans une fenêtre force ce produit à zéro, donc seules les suites contiguës sans zéro peuvent contribuer au maximum.
Indice 2
Utilisez une fenêtre glissante ou suivez les produits sur les suites de chiffres pour éviter de recalculer chaque intervalle depuis zéro.
Indice 3
Attention à la taille exacte de l’intervalle : les zéros en tête comptent comme des chiffres, et si l’intervalle dépasse une suite non nulle, le produit est zéro.
Complexité attendue
temps O(n), espace supplémentaire O(1)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.