สามวิธีในการย้อนกลับสตริงใน JavaScript

บทความนี้อ้างอิงจาก Free Code Camp Basic Algorithm Scripting“ 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 ()

  • วิธีการแยก () แยกวัตถุสตริงออกเป็นอาร์เรย์ของสตริงโดยการแยกสตริงออกเป็นสตริงย่อย
  • เมธอด reverse () จะย้อนกลับอาร์เรย์ในตำแหน่ง องค์ประกอบอาร์เรย์แรกกลายเป็นองค์ประกอบสุดท้ายและองค์ประกอบสุดท้ายจะกลายเป็นองค์ประกอบแรก
  • วิธี 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 Algorithm Challenges ซึ่งฉันได้เสนอวิธีแก้ปัญหาต่างๆและอธิบายทีละขั้นตอนว่าเกิดอะไรขึ้นภายใต้ประทุน

สามวิธีในการทำซ้ำสตริงใน JavaScript

ในบทความนี้ฉันจะอธิบายวิธีแก้ปัญหา "ทำซ้ำสตริงซ้ำสตริง" ของ freeCodeCamp สิ่งนี้เกี่ยวข้องกับ ...

สองวิธีในการยืนยันการสิ้นสุดของสตริงใน JavaScript

ในบทความนี้ฉันจะอธิบายวิธีแก้ปัญหา“ Confirm the Ending” ของ freeCodeCamp

สามวิธีในการแยกตัวเลขใน JavaScript

บทความนี้อ้างอิงจาก Free Code Camp Basic Algorithm Scripting“ Factorialize a Number”

สองวิธีในการตรวจสอบ Palindromes ใน JavaScript

บทความนี้อ้างอิงจาก Free Code Camp Basic Algorithm Scripting“ Check for Palindromes”

สามวิธีในการค้นหาคำที่ยาวที่สุดในสตริงใน JavaScript

บทความนี้อ้างอิงจาก Free Code Camp Basic Algorithm Scripting“ Find the Longest Word in a String”

สามวิธีในการตั้งชื่อกรณีของประโยคใน JavaScript

บทความนี้อ้างอิงจาก Free Code Camp Basic Algorithm Scripting“ Title Case a Sentence”

หากคุณมีวิธีแก้ปัญหาของคุณเองหรือข้อเสนอแนะใด ๆ แบ่งปันด้านล่างในความคิดเห็น

หรือคุณสามารถติดตามฉันบนMedium , Twitter, GithubและLinkedInได้ทันทีหลังจากที่คุณคลิกที่หัวใจสีเขียวด้านล่าง ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

ทรัพยากร

  • วิธีแยก () - MDN
  • ย้อนกลับ () วิธีการ - MDN
  • join () วิธีการ - MDN
  • สตริงความยาว - MDN
  • วิธีการย่อย () - MDN
  • charAt () วิธีการ - MDN