JavaScript 한 줄로 회문 문제를 해결하는 방법
JavaScript의 한 줄로 회문 문제를 해결하여 면접관의 부담을 덜어주는 방법을 보여드리겠습니다. 😎
복습: 회문 문제란 무엇입니까?
문자열은 팰린드롬(palindrome)입니다. 모든 문자의 순서를 반대로 한 후에도 같은 문자열을 얻게 됩니다.
const str = 'abba'
는 회문이고 const str = 'abc'
는 아닙니다.문제는 다음과 같습니다. 유효한 문자열이 주어지면 문자열이 유효한 회문인지 확인하는 함수를 구성할 수 있습니까? 있으면
true
를 반환하고 그렇지 않으면 false
를 반환합니다.IsPalindrome(...) 한 줄에
const isPalindrome = (str, first = 0, last = str.length - 1) =>
(first > last) ?
true :
(str[first] === str[last]) && isPalindrome(str, first + 1, last - 1);
예, 이것은 한 줄의 JavaScript 코드입니다. 읽기 쉽도록 줄 바꿈과 탭을 몇 개 추가했습니다.
위 함수가 부담스러워 보이더라도 걱정하지 마세요. 모든 JavaScript와 재귀 Jui Jitsu를 함께 살펴볼 것입니다. 😅
시작하자...
화살표 기능
JavaScript 화살표 함수를 사용하고 있으므로 제거
return
하고 화살표 함수가 제공하는 암시적 반환 기능을 활용할 수 있습니다. 사랑 화살표 기능! 😍const isPalindrome = (str, first = 0, last = str.length - 1) =>
함수 인수의 기본값
함수 인수에서 바로 2개의 포인터를 초기화했습니다:
first = 0
및 last = str.length - 1
. 매우 시원하고 편리합니다.삼항 연산자
(first > last) ?
true :
(str[first] === str[last]) && isPalindrome(str, first + 1, last - 1);
삼항 조건 연산자는
if {...} else {...}
문장을 한 줄로 압축한 것입니다. 다음은 간단한 예입니다.(x > 0) ?
console.log('x is greater than zero') :
console.log('x is less than or equal to zero');
마지막으로 모두가 좋아하는 것: 재귀!
(str[first] === str[last]) && isPalindrome(str, first + 1, last - 1);
다행스럽게도 이것은 간단한 재귀 응용 프로그램이므로 이해하려고 노력하는 사람에게 골칫거리가 되지 않습니다. 🤯
위의 명령문에서:
(str[first] === str[last])
는 문자열의 첫 번째 문자와 마지막 문자가 일치하는지 확인합니다. * 그런 다음isPalindrome(str, first + 1, last - 1)
는 문자열의 두 번째와 마지막에서 두 번째 문자가 일치하는지 재귀적으로 확인합니다.*예:
str = abcba
에서 isPalindrome(str)
까지 실행하고 최종 return 문을 확장하면(각 재귀 반복을 실행한 후) 다음과 같이 표시됩니다.(str[0] === str[4]) && (str[1] === str[3]) && (str[2] === str[2]) && true
isPalindrome(str)
는 str[0]
대 str[4]
(a vs a)로 시작하는 각 요소 쌍을 확인하고 마지막으로 str[2]
일 때 자신에 대해 first === last
를 확인합니다.끝에 있는
true
문은 when first > last
에 첨부되어 마지막 재귀 함수 호출을 완료합니다.기다리다! 공백, 대문자 및 이상한 문자를 처리해야 하는 경우 어떻게 해야 합니까??
예, this leetcode version과 같은 일부 Palindrome 문제에서는 공백, 특수 문자 및 제거하거나 어떻게든 처리해야 하는 다른 경우가 있는 문자열이 있습니다.
걱정하지 마세요. 소문자만 포함하도록 문자열을 정리하는 1줄 수정이 있습니다. 실행하기 전에 다음을 실행하십시오
isPalindrome(str)
.str = str.match(/[a-z]/gi).join('').toLowerCase();
또는 내가 약속한 것처럼 isPalindrome을 한 줄로 유지할 수 있습니다.
const isPalindrome = (str = str.match(/[a-z]/gi).join('').toLowerCase(), first = 0, last = str.length - 1) =>
(first > last) ?
true :
(str[first] === str[last]) && isPalindrome(str, first + 1, last - 1);
Reference
이 문제에 관하여(JavaScript 한 줄로 회문 문제를 해결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/apmfree78/how-to-solve-palindrome-problem-with-1-line-of-javascript-4066텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)