질문 해결 방안 JavaScript

또 다른 인기 있는 면접 문제는 답문 테스트다.이 해결 방안들은 간단한 단자 회문에 적용된다.빈칸과 문장부호가 있는 회문을 더 복잡하게 얻으려면 본문을 보십시오.
면책 성명: 많은 방법으로 이 문제를 해결할 수 있다. 나는 코딩 면접에서 이 답안을 보거나 사용해서 정답으로 받아들일 것이다.
TLDR: 각 섹션의 하단에서 최적 솔루션 및 실제 솔루션 이해

문제.


함수를 만듭니다. 이 함수는 문자열을 받아들일 것입니다. 만약 그것이 회문이라면 이 문자열을 되돌려줍니다.
예:
isPalindrome('Racecar') //true
isPalindrome('mom') //true
isPalindrome('HelloDevWorld') //false

무엇이 회문입니까


회문이 무엇인지 똑똑히 아는 것이 좀 중요할 수도 있다.회문은 단어, 단어 또는 서열로 앞뒤가 같다.

해결하다


기본적인 1자 회문에 대해 우리는 무엇을 해야 합니까?
  • 문자열을 받아들일 함수 만들기

  • 문자열의 앞뒤가 같은지 확인하기
  • 가능한 해결 방안은 반전 문자열입니다. 받아들인 문자열과 같은지 확인하세요
  • 가능한 해결 방안은 색인마다 알파벳과 알파벳이 같은지 확인하기(1과 알파벳, 2와 꼴찌 알파벳 등)
  • 그렇지 않으면true가false
  • 로 돌아갑니다.

    솔루션 1


    첫 번째 해결 방안, 예를 들어fizz buzz를 해결하고 문제의 분해에 따라 해결합시다. 그래서 문자열을 받아들이는 함수를 만드는 것부터 시작합니다.
    function isPalindrome(stringToCheck){
        //check if the string is the same forward as it is backwards
    
        //possible solution is to reverse the string and see if it is equal to the accepted string
    
        //return true if it is else return false
    }
    
    다음에 우리는 문자열의 앞뒤 방향이 같은지 확인해야 한다.우리는 해결 방안을 사용하여 문자열을 반전시켜 전송된 문자열과 같은지 확인할 것이다.이 점을 하려면 우리가 필요로 한다
    문자열을 단일 문자로 분할하여 배열에 넣기
    그 진열을 반전시키다
    들어오는 문자열을 대조해서 검사합니다.
    .split(),.join(),.reverse() 또는 toLowerCase()가 무엇인지 모르면 계속하기 전에 모든 W3Schools 페이지(페이지마다 링크)를 보십시오.
    첫 번째는 문자열을 분해하는 것입니다. 수표에 toLower Case () 를 추가하면 문자열에 대문자를 보낼지 안 보낼지는 중요하지 않습니다. 테스트 용례 ("Racecar") 에서처럼, 만약 우리가 이렇게 하지 않는다면, "Racecar"는false로 되돌아갈 것입니다. 왜냐하면 "Racecar"는 "Racecar"와 같지 않기 때문입니다.
    function isPalindrome(stringToCheck){
        const stringArray = stringToCheck.toLowerCase().split("");
        //reverse that array
    
        //check it against the passed in string
    
        //return true if it is else return false
    }
    
    이제 반전 어레이가 필요합니다.
    function isPalindrome(stringToCheck){
        const stringArray = stringToCheck.toLowerCase().split("");
        const reverseStringArray = stringArray.reverse().join("");
    
        //check it against the passed in string
    
        //return true if it is else return false
    }
    
    입력한 문자열을 대조해서 검사합니다
    function isPalindrome(stringToCheck){
        const stringArray = stringToCheck.toLowerCase().split("");
        const reverseStringArray = stringArray.reverse().join("");
        const result = reverseStringArray === stringToCheck.toLowerCase();
    
        //return true if it is else return false
    }
    
    너는 어떤 일을 하든지 할 수 있다
    function isPalindrome(stringToCheck){
        const stringArray = stringToCheck.toLowerCase().split("");
        const reverseStringArray = stringArray.reverse().join("");
        const result = reverseStringArray === stringToCheck.toLowerCase();
        return result
    }
    
    아니면 제가 더 좋아해요.
    function isPalindrome(stringToCheck){
        const stringArray = stringToCheck.toLowerCase().split("");
        const reverseStringArray = stringArray.reverse().join("");
        return reverseStringArray === stringToCheck.toLowerCase();
    }
    

    솔루션 2


    이제 우리는 기본적인 해결 방안이 생겼다. 이것은 완벽한 해결 방안이다. 우리는 개발자가 되고, 그것을 일행 프로그램으로 만들 수 있다.왜 안 해?
    const isPalindrome = (input) => {
      return input.toLowerCase() === input.toLowerCase().split('').reverse().join('');
    }
    
    이것은 완전히 같은 일이다. 같은 코드인데, 단지 변수로 나누어지지 않았다

    솔루션 3


    이제 좀 복잡하게 두 번째 가능한 해결 방안을 작성하고 색인마다 첫 번째와 마지막 자모가 같은지 확인하자(1과 마지막, 2와 두 번째부터 마지막까지 등등)
    이것은 가장 효과적일 것이다. 왜냐하면 우리는 중간 문자만 비교하고 문자열은 소문자를 제외하고는 조작되지 않았기 때문이다.그것 또한 곧 실패할 것이다. 만약 그것이 같지 않다면, 전체 그룹을 다른 그룹과 비교하는 것이 아니라, 현재 열려 있는 문자만 비교하는 false (첫 번째 문자에 있을 수 있음) 로 되돌아갈 것이다.
    마지막으로 허용 문자열을 만든 함수와 같이 시작합니다
    function isPalindrome(stringToCheck){
        //check if the string is the same forward as it is backwards
    
        //possible solution check first and last letter for each index and see if they are the same (1 and last, 2 and second to last, etc)
    
        //return true if it is else return false
    }
    
    이 해결 방안에 대해 우리는
  • 문자를 검사하기 위해 순환 문자열이 필요합니다

  • 문자열의 각 문자에 대해

  • 문자열의 끝과 같은 위치의 문자를 대조하여 이 문자를 검사합니다
  • 첫 번째 문자와 마지막 문자
  • 두 번째 문자와 밑의 두 번째 문자
  • 똑같으면true로 돌아가고 그렇지 않으면false
  • 로 돌아갑니다.
    이 순환에 대해 우리는 전체 문자열이 아니라 문자열의 중간 문자로 순환할 수 있다. 왜냐하면 우리는 시작부터 끝까지의 전체 시간을 비교하기 때문이다. 우리가 중간에 도착했을 때, 우리는 이미 모든 문자를 비교했기 때문이다.모르면Math.floor(), for loops 또는 .charAt() 계속하기 전에 각 W3Schools 페이지(페이지마다 링크)를 확인하십시오.
    우리는 수학을 사용할 것이다.floor () 는 중간 문자의 인덱스를 가져오고 문자열을 반복하며,charAt () 는 모든 인덱스에 있는 문자를 검사합니다
    우선, 우리는 중간 문자까지 문자열을 순환해야 한다
    function isPalindrome(stringToCheck){
        for(let i = 0; i < Math.floor(stringToCheck.length/2); i++){
    
            //check that character against the character in the same spot at the end of the string
    
            //if they are different return false otherwise continue loop
        }
    }
    
    현재 우리는 색인과 반대 색인에 있는 문자가 다른지 확인해야 한다.
    주의: 나는 한 줄에서 완성했지만,stringToCheck을 던질 수 있습니다.toLowerCase () 는 변수에 있고, 이 변수의 모든 내용을 stringToCheck 대신 문자열화합니다.toLowerCase()가 두 번 있습니다.두 가지 방법 모두 효과가 있다
    function isPalindrome(stringToCheck){
        for(let i = 0; i < Math.floor(stringToCheck.length/2); i++){
           if (stringToCheck.toLowerCase().charAt(i) !== stringToCheck.toLowerCase().charAt(stringToCheck.length-i-1))
            //if they are different return false otherwise continue loop
        }
    }
    
    만약 그것들이 다르면false를 되돌려주고, 그것들이 같으면 계속 순환합니다.만약 순환이 끝난다면, 우리는 그것들이 모두 같다는 것을 알고, 우리는true로 돌아갈 수 있다.
    function isPalindrome(stringToCheck){
        for(let i = 0; i < Math.floor(stringToCheck.length/2); i++){
            if (stringToCheck.toLowerCase().charAt(i) !== stringToCheck.toLowerCase().charAt(stringToCheck.length-i-1)) return false
        }
        return true
    }
    
    만약 우리가 그것들이 같은지 확인하고 트루로 돌아가면 순환이 끝나지 않고 오보를 받을 수 있기 때문에, 우리는 이런 방식으로 검사를 진행해야 한다.이것은 실패할 때만 순환을 중단합니다. 순환이 끝난 후에true로 돌아갑니다. 순환이 같지 않으면 순환을 중단하고false로 돌아갑니다.

    결론


    그럼 뭐가 제일 좋아요?나는 모든 답안이 매우 좋다고 생각한다.나는 초보 개발자가 해결 방안을 제공할 것이라고 결코 기대하지 않을 것이다.만약 그들이 이렇게 하고 왜 그것이 더 잘 표현되었는지 설명할 수 있다면 나는 매우 인상적일 것이다.만약 내가 쓰려고 한다면, 나는 해결 방안 2를 쓸 것이다. 이것은 내가 성능보다 가독성을 더 좋아하기 때문이다. 특히 처리 능력이 매우 적은 함수에서.그러나 가장 효과적인 방법, 특히 그들에게 큰 답장이 있다면 해결 방안 3이 가장 좋은 선택이 될 것이다.관심 있으시다면 jsbench 실행 중인 3가지 지표입니다

    좋은 웹페이지 즐겨찾기