Τρεις τρόποι αντιστροφής μιας συμβολοσειράς σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Reverse a String"

Η αντιστροφή μιας συμβολοσειράς είναι μια από τις πιο συχνές ερωτήσεις JavaScript στον τεχνικό γύρο της συνέντευξης. Οι ερευνητές μπορεί να σας ζητήσουν να γράψετε διαφορετικούς τρόπους για να αντιστρέψετε μια συμβολοσειρά ή μπορεί να σας ζητήσουν να αντιστρέψετε μια συμβολοσειρά χωρίς να χρησιμοποιήσετε ενσωματωμένες μεθόδους ή μπορεί ακόμη και να σας ζητήσουν να αντιστρέψετε μια συμβολοσειρά χρησιμοποιώντας αναδρομή.

Υπάρχουν δυνητικά δεκάδες διαφορετικοί τρόποι για να το κάνετε, εξαιρουμένης της ενσωματωμένης αντίστροφης λειτουργίας, καθώς η JavaScript δεν διαθέτει.

Ακολουθούν οι τρεις πιο ενδιαφέροντες τρόποι για να λύσω το πρόβλημα της αντιστροφής μιας συμβολοσειράς σε JavaScript.

Πρόκληση αλγορίθμου

Αντιστρέψτε την παρεχόμενη συμβολοσειρά.

Ίσως χρειαστεί να μετατρέψετε τη συμβολοσειρά σε πίνακα για να την αντιστρέψετε.

Το αποτέλεσμα σας πρέπει να είναι συμβολοσειρά.

function reverseString(str) { return str; } reverseString("hello");

Παρέχονται δοκιμές

  • Το reverseString ("γεια") πρέπει να γίνει "olleh"
  • Το reverseString ("Howdy") πρέπει να γίνει "ydwoH"
  • Το reverseString ("Χαιρετισμοί από τη Γη") πρέπει να επιστρέψει "htraE morf sgniteerG"

1. Αντιστρέψτε μια συμβολοσειρά με ενσωματωμένες λειτουργίες

Για αυτήν τη λύση, θα χρησιμοποιήσουμε τρεις μεθόδους: τη μέθοδο String.prototype.split (), τη μέθοδο Array.prototype.reverse () και τη μέθοδο Array.prototype.join ().

  • Η μέθοδος split () χωρίζει ένα αντικείμενο συμβολοσειράς σε μια σειρά συμβολοσειρών διαχωρίζοντας τη συμβολοσειρά σε υποχορδές.
  • Η μέθοδος αντίστροφης () αντιστρέφει έναν πίνακα στη θέση του. Το πρώτο στοιχείο πίνακα γίνεται το τελευταίο και το τελευταίο γίνεται το πρώτο.
  • Η μέθοδος join () ενώνει όλα τα στοιχεία ενός πίνακα σε μια συμβολοσειρά.
function reverseString(str) { // Step 1. Use the split() method to return a new array var splitString = str.split(""); // var splitString = "hello".split(""); // ["h", "e", "l", "l", "o"] // Step 2. Use the reverse() method to reverse the new created array var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse(); // ["o", "l", "l", "e", "h"] // Step 3. Use the join() method to join all elements of the array into a string var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join(""); // "olleh" //Step 4. Return the reversed string return joinArray; // "olleh" } reverseString("hello");

Η σύνδεση των τριών μεθόδων μαζί:

function reverseString(str) { return str.split("").reverse().join(""); } reverseString("hello");

2. Αντιστρέψτε μια συμβολοσειρά με μείωση του βρόχου

function reverseString(str) { // Step 1. Create an empty string that will host the new created string var newString = ""; // Step 2. Create the FOR loop /* The starting point of the loop will be (str.length - 1) which corresponds to the last character of the string, "o" As long as i is greater than or equals 0, the loop will go on We decrement i after each iteration */ for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; // or newString = newString + str[i]; } /* Here hello's length equals 5 For each iteration: i = str.length - 1 and newString = newString + str[i] First iteration: i = 5 - 1 = 4, newString = "" + "o" = "o" Second iteration: i = 4 - 1 = 3, newString = "o" + "l" = "ol" Third iteration: i = 3 - 1 = 2, newString = "ol" + "l" = "oll" Fourth iteration: i = 2 - 1 = 1, newString = "oll" + "e" = "olle" Fifth iteration: i = 1 - 1 = 0, newString = "olle" + "h" = "olleh" End of the FOR Loop*/ // Step 3. Return the reversed string return newString; // "olleh" } reverseString('hello');

ΧΩΡΙΣ ΣΧΟΛΙΑ:

function reverseString(str) { var newString = ""; for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; } return newString; } reverseString('hello');

3. Αντιστρέψτε μια συμβολοσειρά με επανάληψη

Για αυτήν τη λύση, θα χρησιμοποιήσουμε δύο μεθόδους: τη μέθοδο String.prototype.substr () και τη μέθοδο String.prototype.charAt ().

  • Η μέθοδος substr () επιστρέφει τους χαρακτήρες σε μια συμβολοσειρά που ξεκινά από την καθορισμένη θέση μέσω του καθορισμένου αριθμού χαρακτήρων.
"hello".substr(1); // "ello"
  • Η μέθοδος charAt () επιστρέφει τον καθορισμένο χαρακτήρα από μια συμβολοσειρά.
"hello".charAt(0); // "h"

Το βάθος της αναδρομής είναι ίσο με το μήκος της χορδής. Αυτή η λύση δεν είναι η καλύτερη και θα είναι πολύ αργή εάν το String είναι πολύ μεγάλο και το μέγεθος της στοίβας προκαλεί μεγάλη ανησυχία.

function reverseString(str) { if (str === "") // This is the terminal case that will end the recursion return ""; else return reverseString(str.substr(1)) + str.charAt(0); /* First Part of the recursion method You need to remember that you won’t have just one call, you’ll have several nested calls Each call: str === "?" reverseString(str.subst(1)) + str.charAt(0) 1st call – reverseString("Hello") will return reverseString("ello") + "h" 2nd call – reverseString("ello") will return reverseString("llo") + "e" 3rd call – reverseString("llo") will return reverseString("lo") + "l" 4th call – reverseString("lo") will return reverseString("o") + "l" 5th call – reverseString("o") will return reverseString("") + "o" Second part of the recursion method The method hits the if condition and the most highly nested call returns immediately 5th call will return reverseString("") + "o" = "o" 4th call will return reverseString("o") + "l" = "o" + "l" 3rd call will return reverseString("lo") + "l" = "o" + "l" + "l" 2nd call will return reverserString("llo") + "e" = "o" + "l" + "l" + "e" 1st call will return reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h" */ } reverseString("hello");

ΧΩΡΙΣ ΣΧΟΛΙΑ:

function reverseString(str) { if (str === "") return ""; else return reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Υπό όρους (Ternary) χειριστής:

function reverseString(str) { return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");

Η αντιστροφή μιας συμβολοσειράς σε JavaScript είναι ένας μικρός και απλός αλγόριθμος που μπορεί να ζητηθεί σε τεχνικό έλεγχο τηλεφώνου ή σε τεχνική συνέντευξη. Θα μπορούσατε να ακολουθήσετε τη σύντομη διαδρομή για την επίλυση αυτού του προβλήματος, ή να ακολουθήσετε την προσέγγιση με την επανάληψη ή ακόμη πιο περίπλοκες λύσεις.

Ελπίζω να το βρήκατε χρήσιμο. Αυτό είναι μέρος της σειράς άρθρων μου «Πώς να επιλύσω τους αλγόριθμους FCC» σχετικά με τις Προκλήσεις Αλγόριθμου Free Code Camp, όπου προτείνω αρκετές λύσεις και εξηγώ βήμα-βήμα τι συμβαίνει κάτω από την κουκούλα.

Τρεις τρόποι για να επαναλάβετε μια συμβολοσειρά σε JavaScript

Σε αυτό το άρθρο, θα εξηγήσω πώς να λύσετε την πρόκληση "Επανάληψη συμβολοσειράς επανάληψη συμβολοσειράς" του FreeCodeCamp. Αυτό περιλαμβάνει…

Δύο τρόποι επιβεβαίωσης του τερματισμού μιας συμβολοσειράς σε JavaScript

Σε αυτό το άρθρο, θα σας εξηγήσω πώς να λύσετε την πρόκληση του "Confirm the Ending" του FreeCodeCamp.

Τρεις τρόποι παραγοντοποίησης ενός αριθμού σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Factorialize a Number"

Δύο τρόποι για να ελέγξετε για Palindromes σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Έλεγχος για Palindromes".

Τρεις τρόποι για να βρείτε τη μεγαλύτερη λέξη σε μια συμβολοσειρά σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Βρείτε τη μεγαλύτερη λέξη σε μια συμβολοσειρά".

Τρεις τρόποι για τον τίτλο υπόθεση μια πρόταση σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Τίτλος Case a Sentence".

Εάν έχετε τη δική σας λύση ή οποιεσδήποτε προτάσεις, μοιραστείτε τις παρακάτω στα σχόλια.

Ή μπορείτε να με ακολουθήσετε στο Medium , Twitter, Github και LinkedIn , αμέσως αφού κάνετε κλικ στην πράσινη καρδιά παρακάτω ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Πόροι

  • μέθοδος split () - MDN
  • αντίστροφη () μέθοδος - MDN
  • join () μέθοδος - MDN
  • String.length - MDN
  • μέθοδος substr () - MDN
  • charAt () μέθοδος - MDN