Artikel ini berdasarkan Skrip Algoritma Asas Perkhemahan Percuma Code "Reverse a String"
Membalikkan rentetan adalah salah satu soalan JavaScript yang paling kerap ditanya dalam temu bual teknikal. Pewawancara mungkin meminta anda menulis pelbagai cara untuk membalikkan rentetan, atau mereka mungkin meminta anda membalikkan rentetan tanpa menggunakan kaedah bawaan, atau mereka bahkan mungkin meminta anda membalikkan rentetan menggunakan rekursi.
Terdapat berpuluh-puluh cara yang berbeza untuk melakukannya, tidak termasuk fungsi terbalik , kerana JavaScript tidak memilikinya.
Berikut adalah tiga cara saya yang paling menarik untuk menyelesaikan masalah membalikkan rentetan dalam JavaScript.
Cabaran Algoritma
Balikkan rentetan yang disediakan.Anda mungkin perlu mengubah rentetan menjadi larik sebelum dapat membalikkannya.
Hasil anda mestilah rentetan.
function reverseString(str) { return str; } reverseString("hello");
Dengan syarat kes ujian
- reverseString ("hello") harus menjadi "olleh"
- reverseString ("Howdy") harus menjadi "ydwoH"
- reverseString ("Salam dari Bumi") akan kembali "htraE morf sgniteerG"
1. Balikkan tali dengan fungsi terbina dalam
Untuk penyelesaian ini, kami akan menggunakan tiga kaedah: kaedah String.prototype.split (), kaedah Array.prototype.reverse () dan kaedah Array.prototype.join ().
- Kaedah split () membelah objek String menjadi array rentetan dengan memisahkan string menjadi sub string.
- Kaedah terbalik () membalikkan susunan di tempatnya. Unsur larik pertama menjadi yang terakhir dan yang terakhir menjadi yang pertama.
- Kaedah bergabung () bergabung dengan semua elemen larik menjadi rentetan.
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");
Mengikat tiga kaedah bersama:
function reverseString(str) { return str.split("").reverse().join(""); } reverseString("hello");
2. Balikkan tali dengan pengurangan untuk gelung
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');
Tanpa komen:
function reverseString(str) { var newString = ""; for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; } return newString; } reverseString('hello');
3. Balikkan Rentetan Dengan Berulang
Untuk penyelesaian ini, kami akan menggunakan dua kaedah: kaedah String.prototype.substr () dan kaedah String.prototype.charAt ().
- Kaedah substr () mengembalikan watak dalam rentetan bermula dari lokasi yang ditentukan melalui bilangan watak yang ditentukan.
"hello".substr(1); // "ello"
- Kaedah charAt () mengembalikan watak yang ditentukan dari rentetan.
"hello".charAt(0); // "h"
Kedalaman rekursi sama dengan panjang tali. Penyelesaian ini bukan yang terbaik dan akan sangat perlahan sekiranya String sangat panjang dan ukuran timbunan menjadi perhatian utama.
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");
Tanpa komen:
function reverseString(str) { if (str === "") return ""; else return reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");
Pengendali Bersyarat (Ternary):
function reverseString(str) { return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");
Membalikkan String dalam JavaScript adalah algoritma kecil dan sederhana yang dapat diminta pada pemeriksaan telefon teknikal atau temu ramah teknikal. Anda boleh mengambil jalan singkat dalam menyelesaikan masalah ini, atau mengambil pendekatan dengan menyelesaikannya dengan cara berulang atau penyelesaian yang lebih kompleks.
Saya harap anda dapati ini berguna. Ini adalah sebahagian daripada siri artikel "Cara Menyelesaikan Algoritma FCC" saya mengenai Cabaran Algoritma Kem Kod Percuma, di mana saya mencadangkan beberapa penyelesaian dan menerangkan langkah demi langkah apa yang berlaku di bawahnya.
Tiga cara mengulang rentetan dalam JavaScript
Dalam artikel ini, saya akan menerangkan bagaimana menyelesaikan cabaran "Ulangi rentetan ulangi rentetan" freeCodeCamp. Ini melibatkan…
Dua cara untuk mengesahkan berakhirnya Rentetan dalam JavaScript
Dalam artikel ini, saya akan menerangkan cara menyelesaikan cabaran "Confirm the Ending" percuma dari FreeCodeCamp.
Tiga Cara Memfaktorkan Nombor dalam JavaScript
Artikel ini berdasarkan Skrip Algoritma Asas Kem Kod Percuma "Memfaktorkan Nombor"
Dua Cara untuk Memeriksa Palindromes dalam JavaScript
Artikel ini didasarkan pada Skrip Algoritma Asas Kem Kod Percuma "Periksa Palindromes".
Tiga Cara untuk Mencari Kata Terpanjang dalam Rentetan dalam JavaScript
Artikel ini didasarkan pada Skrip Algoritma Asas Kem Kod Percuma "Cari Kata Terpanjang dalam Rentetan".
Tiga Cara untuk Menulis Huruf sebagai Kalimat dalam JavaScript
Artikel ini berdasarkan Skrip Algoritma Asas Perkhemahan Kod Percuma "Judul Kes a Kalimat".
Sekiranya anda mempunyai penyelesaian atau cadangan anda sendiri, bagikan di bawah di komen.
Atau anda boleh mengikuti saya di Medium , Twitter, Github dan LinkedIn , tepat setelah anda mengklik hati hijau di bawah ;-)
#StayCurious, #KeepOnHacking & #MakeItHappen!
Resources
- split() method — MDN
- reverse() method — MDN
- join() method — MDN
- String.length — MDN
- substr() method — MDN
- charAt() method — MDN