JavaScriptで文字列を逆にする3つの方法

この記事は、Free CodeCampの基本的なアルゴリズムスクリプト「文字列を逆にする」に基づいています。

文字列を逆にすることは、インタビューのテクニカルラウンドで最もよく聞かれるJavaScriptの質問の1つです。インタビュアーは、文字列を逆にするさまざまな方法を書くように求めたり、組み込みメソッドを使用せずに文字列を逆にするように求めたり、再帰を使用して文字列を逆にするように求めたりする場合があります。

JavaScriptには関数がないため、組み込みの関数を除いて、これを行うには潜在的に数十の異なる方法があります。

以下は、JavaScriptで文字列を逆にする問題を解決するための私の3つの最も興味深い方法です。

アルゴリズムの課題

提供された文字列を逆にします。

文字列を逆にする前に、文字列を配列に変換する必要がある場合があります。

結果は文字列である必要があります。

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

提供されたテストケース

  • reverseString(“ hello”)は“ olleh”になるはずです
  • reverseString(“ Howdy”)は“ ydwoH”になるはずです
  • reverseString( "Greetings from Earth")は "htraE morfsgniteerG"を返す必要があります

1.組み込み関数で文字列を反転します

このソリューションでは、String.prototype.split()メソッド、Array.prototype.reverse()メソッド、およびArray.prototype.join()メソッドの3つのメソッドを使用します。

  • split()メソッドは、文字列をサブ文字列に分割することにより、Stringオブジェクトを文字列の配列に分割します。
  • 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");

3つの方法を連鎖させる:

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()メソッドの2つのメソッドを使用します。

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

条件付き(3項)演算子:

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

JavaScript文字列を反転することは、技術的な電話スクリーニングまたは技術的なインタビューで尋ねることができる小さくて単純なアルゴリズムです。この問題を解決するために短いルートを取るか、再帰またはさらに複雑なソリューションで問題を解決することによってアプローチを取ることができます。

これがお役に立てば幸いです。これは、Free Code Camp Algorithm Challengesに関する私の「HowtoSolve FCC Algorithms」シリーズの記事の一部です。ここでは、いくつかの解決策を提案し、内部で何が起こっているかを段階的に説明します。

JavaScriptで文字列を繰り返す3つの方法

この記事では、freeCodeCampの「文字列を繰り返す」という課題を解決する方法について説明します。これには…

JavaScriptで文字列の終わりを確認する2つの方法

この記事では、freeCodeCampの「ConfirmtheEnding」チャレンジを解決する方法を説明します。

Three Ways to Factorialize a Number in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Factorialize a Number”

Two Ways to Check for Palindromes in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.

Three Ways to Find the Longest Word in a String in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Find the Longest Word in a String”.

Three Ways to Title Case a Sentence in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.

If you have your own solution or any suggestions, share them below in the comments.

Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)

‪#‎StayCurious‬, ‪#‎KeepOnHacking‬ & ‪#‎MakeItHappen‬!

Resources

  • split() method — MDN
  • reverse() method — MDN
  • join() method — MDN
  • String.length — MDN
  • substr() method — MDN
  • charAt() method — MDN