ثلاث طرق لعكس سلسلة في JavaScript

تستند هذه المقالة إلى البرمجة النصية لخوارزمية Free Code Camp الأساسية "عكس سلسلة"

يعد عكس سلسلة واحدة من أكثر أسئلة JavaScript شيوعًا في الجولة الفنية للمقابلة. قد يطلب منك القائمون بالمقابلة كتابة طرق مختلفة لعكس سلسلة ، أو قد يطلبون منك عكس سلسلة دون استخدام الأساليب المضمنة ، أو قد يطلبون منك عكس سلسلة باستخدام العودية.

من المحتمل أن تكون هناك عشرات الطرق المختلفة للقيام بذلك ، باستثناء الوظيفة العكسية المضمنة ، لأن JavaScript لا يحتوي على واحدة.

فيما يلي أهم ثلاث طرق لحل مشكلة عكس سلسلة في JavaScript.

تحدي الخوارزمية

اعكس السلسلة المتوفرة.

قد تحتاج إلى تحويل السلسلة إلى مصفوفة قبل أن تتمكن من عكسها.

يجب أن تكون نتيجتك سلسلة.

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

حالات الاختبار المقدمة

  • يجب أن تصبح reverseString ("hello") "olleh"
  • يجب أن تصبح reverseString ("Howdy" ) "ydwoH"
  • يجب أن تعود سلسلة reverseString ("تحيات من الأرض") "htraE morf sgniteerG"

1. عكس سلسلة مع وظائف مدمجة

بالنسبة لهذا الحل ، سنستخدم ثلاث طرق: طريقة String.prototype.split () وطريقة Array.prototype.reverse () وطريقة Array.prototype.join ().

  • الطريقة split () تقسم كائن String إلى مصفوفة من السلسلة النصية عن طريق فصل السلسلة إلى سلاسل فرعية.
  • تعكس طريقة () عكس المصفوفة في مكانها. يصبح عنصر المصفوفة الأول هو الأخير ويصبح الأخير هو الأول.
  • يدمج التابع () كل عناصر المصفوفة في سلسلة نصية.
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. عكس سلسلة بحلقة For متناقصة

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"

عمق العودية يساوي طول السلسلة. هذا الحل ليس هو الأفضل وسيكون بطيئًا حقًا إذا كانت السلسلة طويلة جدًا وكان حجم المكدس مصدر قلق كبير.

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");

عامل التشغيل الشرطي (الثلاثي):

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

إن عكس سلسلة في JavaScript هي خوارزمية صغيرة وبسيطة يمكن طلبها في فحص الهاتف الفني أو مقابلة تقنية. يمكنك أن تسلك الطريق القصير في حل هذه المشكلة ، أو تتبع النهج بحلها بالتكرار أو حتى بحلول أكثر تعقيدًا.

اتمنى ان تكون وجدت ذلك مفيدا. هذا جزء من سلسلة مقالاتي بعنوان "كيفية حل خوارزميات FCC" حول تحديات خوارزمية Free Code Camp ، حيث أقترح العديد من الحلول وأشرح خطوة بخطوة ما يحدث تحت الغطاء.

ثلاث طرق لتكرار سلسلة في JavaScript

في هذه المقالة ، سأشرح كيفية حل تحدي FreeCodeCamp "كرر سلسلة كرر سلسلة". وهذا ينطوي…

طريقتان لتأكيد نهاية سلسلة في JavaScript

في هذه المقالة ، سأشرح كيفية حل تحدي "تأكيد النهاية" الخاص بـ freeCodeCamp.

ثلاث طرق لتحليل رقم في JavaScript

تستند هذه المقالة إلى البرمجة النصية لخوارزمية Free Code Camp الأساسية "تحويل رقم إلى عوامل"

طريقتان للتحقق من وجود Palindromes في JavaScript

تستند هذه المقالة إلى البرمجة النصية لخوارزمية Free Code Camp الأساسية "التحقق من وجود Palindromes".

ثلاث طرق للعثور على أطول كلمة في سلسلة في JavaScript

تستند هذه المقالة إلى البرمجة النصية لخوارزمية Free Code Camp الأساسية "العثور على أطول كلمة في سلسلة".

ثلاث طرق لعنوان الحالة جملة في JavaScript

تستند هذه المقالة إلى البرمجة النصية لخوارزمية Free Code Camp الأساسية "حالة العنوان جملة".

إذا كان لديك الحل الخاص بك أو أي اقتراحات ، فشاركها أدناه في التعليقات.

أو يمكنك متابعتي على Medium و Twitter و Github و LinkedIn ، مباشرة بعد النقر فوق القلب الأخضر أدناه ؛-)

# StayCurious ، # KeepOnHacking و # MakeItHappen!

مصادر

  • طريقة الانقسام - MDN
  • الطريقة العكسية - MDN
  • طريقة الانضمام - MDN
  • طول السلسلة - MDN
  • طريقة substr () - MDN
  • طريقة charAt () - MDN