1
votes

Comment décaler des caractères dans une chaîne? - Défi Hackerrank

Ce défi dans Hackerrank est de déplacer la chaîne en utilisant Python et de renvoyer la chaîne. J'ai une fonction qui prend 3 arguments.

def getShiftedString(s, leftShifts, rightShifts):
    #    Left shift the string
    l1 = s[0:leftShifts]
    l2 = s[len(s)-leftShifts:]
    s1 = l2+l1
    #    Right shift the string
    r1 = s1[0:len(s)-rightShifts]
    r2 = s1[len(s)-rightShifts:]
    s = r2+r1
    return s

leftShifts & rightShifts étant des entiers> 0 et "string" est toujours des caractères minuscules.

Décalage à gauche: une seule rotation circulaire de la chaîne dans laquelle le premier caractère devient le dernier caractère et tous les autres caractères sont décalés d'un index vers la gauche. Par exemple, abcde devient bcdea après 1 décalage à gauche et cdeab après 2 décalages à gauche.

Décalage à droite: une seule rotation circulaire de la chaîne dans laquelle le dernier caractère devient le premier caractère et tous les autres caractères sont décalés vers la droite. Par exemple, abcde devient eabcd après 1 décalage à droite et deabc après 2 décalages à droite.

Je n'ai réussi que 4 cas de test sur 14. Voici ma solution. S'il vous plaît laissez-moi savoir la meilleure solution.

shiftStrings("string", leftShifts, rightShifts); 


1 commentaires

Quel est le problème, exactement? Voici ma solution. Veuillez me faire part de la meilleure solution Attendez-vous vraiment que les gens fassent tout pour vous? Les noms de variables et de fonctions doivent généralement suivre le style lower_case_with_underscores .


3 Réponses :


0
votes

Vous devez modifier la ligne suivante:

def getShiftedString(s, leftShifts, rightShifts):
    return (s*3)[len(s)+rightShifts-leftShifts:2*len(s)+rightShifts-leftShifts]

à

l2 = s[leftShifts:]

Vous pouvez également implémenter la fonction sur une seule ligne:

l2 = s[len(s)-leftShifts:]


3 commentaires

J'ai essayé avec l'entrée ci-dessous, mais la sortie n'était pas comme prévu.


shifted = getShiftedString ('abcdefghijklmnopqrstuv', 5, 2) print (décalé)


Oui, la modification de l2 = s [leftShifts:] a fonctionné comme prévu



1
votes
def getShiftedString(s, leftShifts, rightShifts):
    i = (leftShifts - rightShifts) % len(s)
    return s[i:] + s[:i]

0 commentaires

0
votes
def getShiftedString(s, leftShifts, rightShifts):
    total_shift = leftShifts - rightShifts
    if len(s) < total_shift:
        total_shift = total_shift - len(s)
    if total_shift > 0:
        s = s[total_shift:] + s[:total_shift]
    elif total_shift < 0:
        s = s[total_shift:] + s[:total_shift]
    else:
        return s
    return s

0 commentaires