회문 질문(JavaScript)

9110 단어
JavaScript를 사용하면 언젠가는 회문에 대한 질문을 접하게 될 것입니다. 먼저 회문이란 무엇입니까? 아직 이것을 접해보지 못한 분들을 위해 회문은 앞뒤로 똑같이 읽는 단어, 문장, 숫자 등입니다. 그래서 조금 더 기술적인 이야기로 말하자면 역으로 재배열될 때 동일하게 유지되는 문자열입니다.

회문을 확인하는 것은 인기 있는 기술 면접 질문인 것 같습니다. 이 문제를 해결하는 방법은 여러 가지가 있으며 최선의 조치가 무엇인지에 대한 의견이 상당히 강한 것 같습니다. 나는 가장 좋거나 가장 효율적인 것으로 간주되는 것이 아니라 이 질문에 답할 수 있는 몇 가지 방법을 설명할 것입니다.

나는 최근 기술 인터뷰에서 이런 질문을 받았다. 저는 조금 더 깊이 들어가기로 결정했습니다. 제 생각은 이렇게 하면 문제를 단계로 나누는 과정을 보여주고 그 단계가 원하는 결과를 얻을 수 있는 방법을 설명할 수 있다는 것입니다. 제쳐두고, 내 솔루션은 올바른 출력을 가졌으므로 올바른 작업을 수행했습니다. 그러나 마지막에 내가 선택한 솔루션에 대해 논의할 때 앞으로 더 적은 코드(예: 내장 메서드 사용)로 수행하도록 권장되었습니다.

이 특별한 설정에서는 예외적인 경우가 무시되었음을 명심하십시오. 지침은 충분히 간단하여 주어진 입력이 회문인지 확인하는 함수를 작성했습니다.

원래 이 문제를 해결하기로 결정한 방법은 다음과 같습니다.

function palindrome(str){
    let reverse = '';
    // the reverse is an empty string for now

    // loop through the string starting from the end to get each character
    for (let i = str.length - 1; i >= 0; i--){
        // add each character to the reverse
        reverse += str.charAt(i);
    }
    // if true (str is stricly equal to reverse)
    return str === reverse;
}

console.log(palindrome('racecar')) // true
console.log(palindrome('palindrome')) // false


내장 메소드로 이것을 해결했다면 다음과 같을 것입니다.

function palindrome(str){
    return str === str.split('').reverse('').join('')
}

console.log(palindrome('racecar')) // true
console.log(palindrome('palindrome')) // false


짧고 달콤하며 요점에 맞습니다.

이 문제를 해결하는 방법에 대한 또 다른 분석은 다음과 같습니다.

function palindrome(str){
    let reverse = '';

    for (let i = 0; i < str.length/2; i++){
        if (str[i] !== str[(str.length - 1) - i]){
            return false;
        }
    }
    return true;
}

console.log(palindrome('racecar')) // true
console.log(palindrome('palindrome')) // false


그리고 마지막으로, 나는 이 솔루션을 꽤 최근에 보았습니다. 두 개의 개별 지점, 즉 입력의 시작과 입력의 끝에서 시작하여 두 지점이 일치하는지 여부를 확인합니다(소스를 공유하지 않은 점을 용서하십시오. 기억할 수 없습니다. 이 솔루션을 본 곳):

function palindrome(str) {
  let beginning = 0;
  let end = str.length - 1;

  while (beginning <= end) {
    // if the beginning character is not equivalent to the end character, it's not a palindrome
    if (str[beginning] !== str[end]) return false;
    // increment the beginning, decrement the end until you meet in the middle
    beginning++;
    end--;
  }
    return true;
}

console.log(palindrome('racecar')) // true
console.log(palindrome('palindrome')) // false


JavaScript에서 무언가가 회문인지 확인하는 몇 가지 방법이 있습니다. 이 문제를 해결하는 다른 방법이 있다면 자유롭게 공유해주세요!

좋은 웹페이지 즐겨찾기