2381. Lettres changeantes II
Difficulté :Moyen
Sujets : Tableau, chaîne, somme de préfixe
Vous recevez une chaîne s de lettres anglaises minuscules et un tableau d'entiers 2D décalés où shifts[i] = [starti, endi, directioni]. Pour chaque i, décaler les caractères en s du début de l'indexi à la fin de l'indexi (inclus) en avant si directioni = 1, ou décale les caractères vers l'arrière si directioni = 0.
Déplacer un caractère vers l'avant signifie le remplacer par la lettre suivante de l'alphabet (retourner pour que « z » devienne « a »). De même, décaler un caractère vers l'arrière signifie le remplacer par la lettre précédente de l'alphabet (retourner pour que « a » devienne « z »).
Renvoyer la chaîne finale après l'application de tous ces décalages vers s.
Exemple 1 :
Exemple 2 :
Contraintes :
Indice :
Solution :
Nous devons éviter de décaler les caractères un par un à chaque décalage, car cela serait trop lent pour des entrées volumineuses. Au lieu de cela, nous pouvons utiliser une approche plus optimale en tirant parti d'une technique appelée somme des préfixes.
Implémentons cette solution en PHP : 2381. Lettres changeantes II
Explication:
- Pour chaque quart de travail [début, fin, direction], nous incrémenterons un tableau de décalage au début et décrémenterons à la fin 1. Cela nous permet de suivre le début et la fin de la plage de décalage.
- Après avoir traité tous les décalages, nous appliquons une somme de préfixes sur le tableau de décalage pour obtenir le décalage cumulé à chaque index.
- Enfin, nous appliquons le décalage cumulatif à chaque caractère de la chaîne.
Explication du code :
- Analyse des entrées : Nous convertissons les chaînes d'entrée en un tableau de caractères pour une manipulation plus facile.
- Shift Array : On initialise un tableau de décalage de taille n 1 à zéro. Ce tableau est utilisé pour suivre les effets de décalage. Pour chaque quart de travail [début, fin, direction], nous ajustons les valeurs à shift[start] et shift[end 1] pour refléter le début et la fin du quart de travail.
- Somme des préfixes : Nous calculons le décalage total pour chaque caractère en itérant sur le tableau de décalage et en maintenant une somme cumulée de décalages.
- Décalage de caractère : Pour chaque caractère de la chaîne, nous calculons le caractère décalé final à l'aide de la formule (ord(currentChar) - ord('a') totalShift) % 26, qui tient compte de la nature circulaire du alphabet.
- Résultat de retour : La chaîne finale est obtenue en reconvertissant le tableau de caractères en chaîne et en le renvoyant.
Complexité temporelle :
Cette solution gère efficacement le problème même avec les limites supérieures des contraintes d'entrée.
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!