Javascript 알고리즘 #2: 회신


답장!답장!!답장!!!아, 아가.지금 이게 뭔지 알고 싶은 게 확실해.너는 알다시피, 소프트웨어 개발자로서 누군가가 나와 의사소통을 할 때 이런 말을 할 때, 나는 서투르게 제스처를 하고, 어느 정도 흥미가 없다는 것을 표시하기 위해 매우 싫은 미소를 짓는다.나는 정말 사람을 곤혹스럽게 하는 것을 좋아하지 않는다.
안전벨트 다 맸어요?우리들은 이 큰 글자를 공평하게 대합시다.우리?

회문은 단어, 숫자 또는 다른 문자 서열로 앞뒤가 같다. 예를 들어 "madam"이나 "racecar"등이다.약간의 프로그래머의 말로 말하자면, 우리는 이것이 텍스트 문자열이라고 말할 수 있으며, 반대 방향(반대 방향)으로 다시 배열할 때 변하지 않는다.
이 큰 글자가 이렇게 많아, 응?

도전하다


텍스트 문자열을 지정해서true 또는false로 되돌려줍니다. 이 텍스트가 회문인지 여부를 표시합니다. 
PS: 안디라의 테스트에서 이 도전을 한 번 받았던 기억이 나요.

알고리즘 논리


도전은 텍스트 문자열을 지정하는 것입니다. 이것은 우리의 함수에 문자열 형식의 매개 변수가 있다는 것을 의미합니다. 우리는'text'라고 할 수 있습니다.다음에 우리는 문자열이 회문인지 아닌지를 평가해야 한다.이를 위해서는 먼저 문자열을 반전시킨 다음에 매개 변수로 전달된 문자열과 비교해야 한다. 
알파벳 대소문자 문제를 피하기 위해 텍스트를 단일 대소문자 유형(대문자 또는 소문자)으로 바꾸는 것이 합리적인 것 같습니다.마지막으로, 우리는 평가 결과에 근거하여 진실이나 거짓으로 돌아가야 한다.그것은 회문일 때 True이고, 그렇지 않으면false이다.
다 말했잖아!이제 코드 Dojo에 들어갑니다.

코드 구현


회문 검사기를 실현할 수 있는 방법은 매우 많은데, 이것은 주로 몇 가지 방법으로 문자열과 순환 문자열을 반전시킬 수 있기 때문이다.그래서 몇 개의 특기와 조합을 한 사람이 완성할 수 있다.그러나 우리는 다음과 같은 두 가지 독특한 방법을 고려하여 이 점을 실현할 것이다.

직관적 방법


좋아, 나는 이 제목이 좀 오도된 것 같다는 것을 인정해야 해.만약 모든 사람이 이런 도전에 직면하게 된다면, 이것은 결코 그들이 처음으로 할 수 있는 일이 아니다.이것은 사실상 문제를 해결하는 직접적인 방법일 뿐이다.얼마나 직접적인가?보게 될 거야.
/*
The Intuitive Approach: This is mostly a direct
approach that most would follow. We split the
string into characters, reverse the array of characters,
join the characters back to form a string, and then
test the created string against what was originally received.
*/
function palindrome(text) {
// Split, reverse and join string to get reversed text
var reversedText  = text.toLowerCase()
                    .split('').reverse().join('');


return text === reversedText;


}
나는 틀림없이 누군가가'이것은 정말 조금도 직접적이지 않다'고 생각하고 있을 것이다.오, 그래!우리가'비밀'을 밝혀볼까요?
  • 우선, 우리의 함수는 하나의 매개 변수를 받아들인다. 이 매개 변수는 테스트할 텍스트 문자열이다.
  • 다음에 문자열의 모든 알파벳을 소문자로 변환해서 호출합니다.문자를 화수 그룹에 분산시키기 위해 빈 문자열을 전달합니다.
  • 다음으로 전화하겠습니다.배열에서 reverse () 를 실행하여 그 요소를 역방향으로 다시 배열합니다.
    나중에 전화할게요.역방향 배열에서 join () 을 사용하여 문자열을 다시 생성합니다.
  • 봐라!우리는 거꾸로 된 문자열이 하나 있다.코드를 간결하고 실용적으로 하기 위해 우리가 어떻게 이 모든 방법을 연속적으로 연결하는지 주의하십시오.이것은 내가 Javascript를 좋아하는 이유 중의 하나이다.우아한 문법!
  • 마지막으로, 우리는 비교 결과를 되돌려줍니다. 이것은 부울 값입니다. 전송된 문자열이 우리가 만든 역방향 문자열과 같은지 여부를 표시합니다.이것은 우리가 전달한 텍스트가 회문인지 아닌지를 알려준다.
  • 카피치!!!이것은 매우 쉽지 않습니까?
    좀 더 복잡한 걸 해볼게요.

    문자 순환 및 비교


    응!나는 확실히 이것을 약간 복잡한 실현이라고 부른다. 
    면책 성명: 예상보다 더 곤혹스러울 수 있습니다.하지만 나는 내가 할 수 있는 대로 그것을 분해할 것이다.그러니까 두려워하지 마!
    이런 방법에 따라, 우리는 문자열을 전송할 때 이 문자열을 반복해서 훑어보고, 모든 문자를 현재 문자열이 반전될 때 있는 위치의 문자와 비교하려고 한다. 
    예를 들어 문자열 "developer"를 테스트하면 "d"와 "r"를 비교합니다. 문자열이 반전되면 "d"가 "r"의 위치를 차지하기 때문입니다.이상한 문장부호, 알아!미소 짓다
    따라서 우리는 끝에서 위치 2의'e'와 위치 2의'e'를 비교할 것이다.문자열이 회문이면 이 모든 것이 진짜로 테스트됩니다.
    자, 이제!코드를 스스로 말하게 하다.
    /*
    Looping and Comparing using .every(): This approach allows us to
    split the sting into an array of characters and then loop through
    the characters comparing them with the characters in their
    corresponding positions from the right.
    */
    function palindrome(text) {
    // Split text into array of characters
    let charArray = text.toLowerCase().split('');
    
    
    // Loop through every character and compare with the
    // character in its corresponding position if the string
    // was reversed. Then store the result
    let result = charArray.every((letter, index) => {
    return letter === charArray[charArray.length - index - 1];
    });
    
    
    // Return the result of the evaluation
    return result
    }
    
    여기 극적인 음향 효과가 있는데.. 하하.. 나 정말 재밌어.
    응, 핵심 자바스크립트를 사용하여 놀라운 일을 하는 것을 배우는 것은 흥미롭고 모험적인 과정이라는 것을 분명히 알아차렸을 거라고 믿어.네, 복습해 봅시다.
  • 문자열의 모든 알파벳을 소문자로 변환해서 사용합니다.split () 를 다시 사용하여 문자열의 문자를 그룹으로 분산합니다.
  • 다음에 우리는 특수한 수조 방법을 사용한다.every () 는 수조를 반복해서 검사를 실행합니다.기본적으로.every () 방법은 수조의 모든 요소가 제공된 함수를 통해 이루어지는지 테스트합니다.이 예에서 제공한 함수는 수조의 현재 알파벳과 색인을 매개 변수로 받아들인다.그리고 문자열이 반전될 때 현재 위치를 차지하고 있는 알파벳과 비교한 결과를 되돌려줍니다.자세한 내용every()here.
  • 누적.모든 상황에서 테스트가 통과되면, 모든 () 방법의 계산 결과는true이고, 테스트가 통과되지 않으면false입니다. 이 계산 결과는 변수 "result"에 저장된 결과입니다. 이것은 우리의 함수가 되돌아온 결과로, 문자열이 실패하거나 회문 검사를 통과했음을 나타냅니다.

  • 그렇게 지도 모른다, 아마, 아마...성능에 대해 말하자면, 우리의 두 번째 실현 자체에 약간의 문제가 존재한다.글의 나머지 부분을 계속하기 전에 스스로 그것을 식별해 볼 수 있을까?
    네, 여기 있습니다.우리는 전체 문자열을 반복해서 훑어보고, 모든 자모와 그 위치가 상반되는 대응 자모를 비교한다.아마도 펜과 종이를 꺼내서 수동으로 완성해 보세요. 그러면 중간 위치를 유지하는 문자열 밖으로 순환하면 본질적으로 교체된 앞부분에서 이미 겪은 비교를 반복하는 것입니다.그것은 쓸데없는 것이라고 생각하지 않니?
    이 문제를 해결하기 위해서, 문자열의 중점에 도달하면 순환을 멈추도록 검사를 추가할 것입니다.나는 정말 너에게 이것을 최적화해 보라고 하고 싶다.당신의 생각을 보고 댓글과 트위터에 해결 방안을 발표하겠습니다.
    재밌게 놀아라!

    평가 및 요약


    우리는 현재 자바스크립트에서 회문 검사기를 실현하는 두 가지 방법을 연구했다.이 두 가지 실현은 모두 매우 좋아서 당신이 인코딩 면접을 통과하는 것을 도울 수 있습니다.
    그러나 우리가 이 예에서 관심을 가진 바와 같이 어떤 것이 더 높은 성능 특징을 가지고 있는지 확인하고 그것들의 장단점을 살펴야 한다.
    나의 다음 글에서, 우리가 회문의 다른 더욱 엄격한 변체를 고려할 때, 나는 이 알고리즘을 실현하는 더 많은 방법을 탐색하고, 그리고 우리는 성능 테스트를 실행하여 성능이 가장 높은 알고리즘을 확정할 것이다.
    다른 방식으로 이 점을 실현하고 모든 방법을 사용하는 장단점을 탐색할 수 있다.채팅방(아마도 당신의 펜의 링크)에서 여러분과 공유할 수 있습니다.우리는 그들을 만나기를 기대하고 있다.동시에 질문하다.나는 우리가 반드시 답을 찾을 수 있을 것이라고 믿는다.
    만약 이 글이 도움이 된다고 생각한다면 다른 사람과 나누세요.너는 자유롭게 받아들이고 자유롭게 주어라.나도 모두가 박수를 치는 것을 개의치 않는다.
    박수, 다른 사람들도 즐길 수 있게!
    트위터에 연락 주시겠어요?
    구독HERE 최신 소식을 알고 싶으시면 다음 글에 계속 관심을 가져 주십시오.

    좋은 웹페이지 즐겨찾기