회문 알고리즘 문제 풀기

2656 단어
더 많은 알고리즘을 배우는 여정은 계속되고, 각 문제마다 다양한 접근 방식과 패턴에 대해 더 많은 경험을 얻고 있습니다. 모든 알고리즘을 해결하기 위해 더 작은 단계로 나누는 것은 항상 도움이 됩니다. 회문 문제는 작은 단계에서 솔루션에 도달하는 방법의 좋은 예라고 생각합니다.

문제

문자열이 제공되며 문자열이 회문인지 여부에 따라 true 또는 false를 반환해야 합니다. 회문은 뒤집었을 때 같은 단어를 철자하는 단어 또는 문자열입니다. 이 문제에서 공백과 구두점도 문자열의 문자로 계산됩니다.

전.

회문("abba") === 참
회문("abcdefg") === 거짓
회문("racecar") === 참

접근하다

이 문제를 해결하는 한 가지 방법은 문자열을 문자 배열로 변환하고 반복하여 문자 시퀀스가 ​​회문인지 확인하는 것입니다. 기본적으로 첫 번째 요소가 마지막 요소와 일치하는지, 두 번째 요소가 두 번째에서 마지막 요소와 일치하는지 등을 확인합니다.

전.

우리의 문자열은 "racecar"입니다.
배열은 ['r', 'a', 'c', 'e', ​​'c', 'a', r']입니다.

배열을 반복하고 배열의 양쪽 끝에서 안쪽으로 이동할 때 문자 쌍을 확인합니다.

['자동차 경주']

['자동차 경주']

['자동차 경주']

마지막 단계에서 왼쪽과 오른쪽이 모두 문자 '''에서 만나므로 이것이 회문입니다.

해결책

function palindrome(string) {

}

//1.
split 메서드를 사용하여 문자열을 배열로 변환합니다. 단어를 개별 문자로 분할하려면 split 메소드의 인수로 ''를 입력해야 합니다.

function palindrome(string) {
  string.split('')
}

//2.
.every() 배열 메서드를 사용하여 문자열의 각 문자가 앞에서 언급한 방식으로 일치하는지 확인하여 회문인지 확인합니다. .every()는 .every()에 전달한 조건에 따라 부울 값을 반환합니다. .every()는 문자와 인덱스라는 두 개의 인수가 있는 함수를 사용합니다.

function palindrome(string) {
  string.split('').every((character, index) => {
  //we will implement the condition here 
  }
}

우리의 조건은 배열의 왼쪽과 오른쪽 끝에서 시작하여 이동하는 요소 쌍을 확인하는 것입니다.

function palindrome(string) {
  string.split('').every((character, index) => {
    character === string[string.length - index - 1]
  }
}

함수가 우리가 원하는 답(이 경우 부울)을 출력할 수 있도록 두 줄 모두에서 반환하는 것을 잊지 마십시오.

function palindrome(string) {
  return string.split('').every((character, index) => {
    return character === string[string.length - index - 1]
  }
}

'문자열' 뒤의 괄호 안에 있는 내용을 분석해 보겠습니다.
배열은 인덱스가 0이므로 배열의 마지막 요소를 얻으려면 string.length에서 1을 빼야 합니다. 다음으로 string.length에서 index를 빼서 배열로 안쪽으로 이동하고 왼쪽 요소와 일치시킵니다.

회문 문제에는 모든 알고리즘 문제와 마찬가지로 많은 접근 방식이 있으며 이는 해결 방법 중 하나일 뿐입니다. 어떤 접근 방식을 사용하든 모든 문제를 더 작은 단계로 나누는 것이 항상 도움이 됩니다. 오류를 조기에 포착하는 데 도움이 되며 코드를 작성하기 전에 솔루션에 대한 로드맵을 작성합니다.

자원

Stephen Grider's Algorithms and Data Structures Udemy Course

Interview Cake

좋은 웹페이지 즐겨찾기