이 기사는 Free Code Camp Basic Algorithm Scripting“Reverse a String”을 기반으로합니다.
문자열 반전 은 기술 인터뷰에서 가장 자주 묻는 JavaScript 질문 중 하나입니다. 면접관은 문자열을 뒤집는 다른 방법을 작성하라고 요청할 수도 있고 내장 메서드를 사용하지 않고 문자열을 뒤집으라고 요청할 수도 있고 재귀를 사용하여 문자열을 뒤집을 수도 있습니다.
JavaScript에는 내장 된 역 기능을 제외하고 잠재적으로 수십 가지 방법이 있습니다.
다음은 JavaScript에서 문자열 반전 문제를 해결하는 가장 흥미로운 세 가지 방법입니다.
알고리즘 도전
제공된 문자열을 뒤집습니다.뒤집기 전에 문자열을 배열로 바꿔야 할 수도 있습니다.
결과는 문자열이어야합니다.
function reverseString(str) { return str; } reverseString("hello");
제공된 테스트 케이스
- reverseString ( "hello") 은 "olleh"가되어야합니다.
- reverseString ( "Howdy") 은 "ydwoH"가되어야합니다.
- reverseString ( "Greetings from Earth") 은 "htraE morf sgniteerG"를 반환해야합니다.
1. 내장 함수로 문자열 반전
이 솔루션의 경우 String.prototype.split () 메서드, Array.prototype.reverse () 메서드 및 Array.prototype.join () 메서드의 세 가지 메서드를 사용합니다.
- 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");
세 가지 방법을 함께 연결 :
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에서 문자열 반전은 기술 전화 심사 또는 기술 인터뷰에서 요청할 수있는 작고 간단한 알고리즘입니다. 이 문제를 해결하는 데 짧은 길을 택하거나 재귀 또는 훨씬 더 복잡한 솔루션으로 해결하여 접근 방식을 취할 수 있습니다.
도움이 되었기를 바랍니다. 이것은 Free Code Camp Algorithm Challenges에 대한 "How to Solve FCC Algorithms"시리즈 기사의 일부입니다. 여기에서 몇 가지 솔루션을 제안하고 내부에서 일어나는 일을 단계별로 설명합니다.
JavaScript에서 문자열을 반복하는 세 가지 방법
이 기사에서는 freeCodeCamp의“Repeat a string repeat a string”문제를 해결하는 방법을 설명합니다. 여기에는…
JavaScript에서 문자열의 끝을 확인하는 두 가지 방법
이 기사에서는 freeCodeCamp의“Confirm the Ending”문제를 해결하는 방법을 설명합니다.
JavaScript에서 숫자를 분해하는 세 가지 방법
이 기사는 Free Code Camp Basic Algorithm Scripting“Factorialize a Number”를 기반으로합니다.
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!
자원
- split () 메서드 — MDN
- reverse () 메서드 — MDN
- join () 메서드 — MDN
- String.length — MDN
- substr () 메서드 — MDN
- charAt () 메서드 — MDN