Putem scrie mai multi algoritmi JavaScript pentru a produce rasturnarea unui string.
De exemplu, pentru stringul „reverseString” sa obtinem in final stringul „gnirtSesrever”.
Metoda 1
//reverseString("reverseString") should return "gnirtSesrever".
function reverseString(str) {
//impartim stringul intr-un vector de caractere
// 'reverseString'->[ 'r', 'e', 'v', 'e', 'r', 's', 'e', 'S', 't', 'r', 'i', 'n', 'g']
let splitString = str.split("");
//facem reverse la array
// [ 'r', 'e', 'v', 'e', 'r', 's', 'e', 'S', 't', 'r', 'i', 'n', 'g']
// -> [ 'g', 'n', 'i', 'r', 't', 'S', 'e', 's', 'r', 'e', 'v', 'e', 'r']
let reverseArray = splitString.reverse();
//unim elementele tabloului intr-un sir
// [ 'g', 'n', 'i', 'r', 't', 'S', 'e', 's', 'r', 'e', 'v', 'e', 'r'] -> 'gnirtSesrever'
let joinArray = reverseArray.join("");
return joinArray;
}
console.log("reverse string is:");
console.log(reverseString("reverseString"));
In acest algoritm am facut fiecare pas in parte:
- am impartit sirul dat intr-un vector de caractere. Pentru aceasta am folosit functia split().
- am aplicat functia reverse() asupra sirului de caractere pe care l-am creat
- am reconstruit stringul din sirul de caractere creat folosind join(„”).
Metoda 2
Este de fapt tot codul explicat prin prima metoda dar condensat:
//reverseString("reverseString") should return "gnirtSesrever".
function reverseString(str) {
return str.split("").reverse().join("");
}
console.log("reverse string is:");
console.log(reverseString("reverseString"));
Este o inlantuire a celor trei pasi explicati in detaliu in metoda 1.
Metoda 3
Aceeasi problema de rasturnare a unui string se poate face folosind structura repetitiva FOR.
Construim un string nou luand fiecare caracter de la finalul sirului initial catre inceputul sirului. Ne oprim in momentul terminarii caracterelor din stringul initial. Structura repetitiva se face prin decrementare.
//reverseString("reverseString") should return "gnirtSesrever".
function reverseString(str) {
let newString="";
for(let i=str.length-1; i>=0;i--){
newString+=str[i];
}
return newString;
}
console.log("reverse string is:");
console.log(reverseString("reverseString"));
Metoda 4
Absolut similar putem implementa acelasi algoritm ca si mai sus dar folosind structura WHILE:
//reverseString("reverseString") should return "gnirtSesrever".
function reverseString(str) {
let newString="";
let i=str.length-1;
while(i>=0){
newString+=str[i];
i--;
}
return newString;
}
console.log("reverse string is:");
console.log(reverseString("reverseString"));
Cat timp sirul mai are caractere ia un caracter de pe pozitia i si adauga-l in noul sir. Variabila i este initializata pe ultimul caracter din sir. Sa nu uitam ca primul caracter din sir este pe pozitia 0.
Metoda 5
Nu este neaparat un nou algoritm. Este un algoritm in care folosim recursivitatea.
//reverseString("reverseString") should return "gnirtSesrever".
function reverseString(str) {
if(str==="")
return "";
else
return reverseString(str.substring(1)) + str.charAt(0);
}
console.log("reverse string is:");
console.log(reverseString("reverseString"));
In acest algoritm am folosit 2 metode:
– metoda String.prototype.substr() care returneaza caracterele dintr-un sir incepand cu pozitia specificata (de exemplu „book”.substring(1) va returna „ook” și
– metoda String.prototype.charAt() care returneaza caracterul indicat din string
Cum functioneaza intregul proces recursiv?
Procesul se desfasoara in mai multe apeluri imbricate.
Prima parte
La fiecare apel, se verifica daca variabila str mai are caractere. Daca da se va returna „”.
Daca nu se va apela reverseString(str.substring(1)) + str.charAt(0);
Pentru stringul „abcd” la primul pas reverseString(„abcd”) va returna reverseString(„bcd”) + „a”.
La al doilea pas, reverseString(„bcd”) va returna reverseString(„cd”) + „b”.
La al treilea pas, reverseString(„cd”) va returna reverseString(„d”) + „c”.
La ultimul pas, reverseString(„d”) va returna reverseString(„”) + „d”.
A doua parte a recursivitatii
Conditia din instructiunea if a fost adevarata si procesul revine de la capat spre inceput.
Al patrulea apel va returna („”) + „d” = „d”.
Urmatorul va returna („d”) + „c” = „dc”.
Apoi va urma apelul care va returna („dc”) + „b” = „dcb”.
Pentru ca in final, la primul apel sa avem („dcb”) + „a” = „dcba”.
Sigur ca acelasi algoritm ar putea fi scris concentrat, folosindu-se opreratorul ternar
//reverseString("reverseString") should return "gnirtSesrever".
function reverseString(str) {
return (str === "" ? "" : reverseString(str.substring(1)) + str.charAt(0));
}
console.log("reverse string is:");
console.log(reverseString("reverseString"));
In concluzie: algoritmul de rasturnare a unui string poate fi rezolvat in mai multe moduri. Cat mai multe dintre ele este bine sa le stii inainte de interview.
Sper ca acest articol sa iti fie de folos. Astept feedback-ul tau si as vrea sa stiu ce alte subiecte te-ar interesa sa le gasesti raspunsul aici.
Trebuie să te autentifici pentru a publica un comentariu.