2016-10-11 2 views
0

좋아요. 회문문은 철자가 같은 단어입니다. 만약 우리가 같은 문장을 뒤로 거치고 싶다면 어떻게해야할까요? 그래서 kook은 하나입니다. race car은 또 다른 것입니다.공백을 고려하는 회문 함수를 만들려고합니다.

그래서 공간을 고려하지 않은 공간을 만들었습니다.

function isPal(string){ 
    var l = string.length; 
    for (var i = 0; i < (l/2); ++i) { 
     if (string.charAt(i) != string.charAt(l - i - 1)){ 
      return false; 
     } 
    } 
    return true; 
} 

이 단어는 단어에 적합합니다.

이제 문자열을 배열로 밀어 넣고 각 문자를 자체 문자열로 나눈 다음 공백을 제거한 다음 if (string.charAt(i) != string.charAt(string.length - i - 1))을 실행합니다. 그래서 여기 내가 쓴하지만에 실패거야 ..

function isPalindrome(string){ 
    var arr = []; 
    arr.push(string.split('')); 
    for (i = 0; i < arr.length; i++){ 
     if (arr[i] === ' '){ 
      arr.splice(i, 1); 

내가 arr을 반환하는 경우, 여전히 나에게 거기에 공간이 문자열을 제공합니다. 어떻게해야합니까? 감사!

편집 : 사용 솔루션 여전히 여기에 '자동차 경주' 에 거짓 점점 내가 가지고있는 작업은 다음과 같습니다

function isPalindrome(string){ 
    var arr = string.split(''); 
    for (i = 0; i < arr.length; i++){ 
     if (arr[i] === ' '){ 
      arr.splice(i, 1); 
     } else if (arr[i] != arr[arr.length - i - 1]){ 
      return false; 
     } 
    } 
    return true; 
} 

내 오류 어디? ,

function isPal(string){ 
    string = string.split(" ").join(""); // remove all spaces 
    var l = string.length; 
    for (var i = 0; i < (l/2); ++i) { 
     if (string.charAt(i) != string.charAt(l - i - 1)){ 
      return false; 
     } 
    } 
    return true; 
} 

isPal("a man a plan a canal panama"); // true 

답변

1

귀하의 문제는 다음 줄에 있습니다

arr.push(string.split('')); 

문자열입니다. split ('')은 배열을 반환합니다. 그래서, arr은 실제로 하나의 엔트리가있는 배열입니다 (문자를 포함하는 다른 배열).

var arr = []; 
arr.push(string.split('')); 

var arr = string.split(''); 

으로 여전히 거짓 점점

+0

를 예상대로 작동합니다 :(여기에 내가 ... 한 기능 isPalindrome (문자열) { var에 도착 = 문자열 내용은 다음과 같습니다 교체합니다. {arr.splice (i, 1); } else if (i = 0; (arr [i]! = arr [arr.length - i - 1]) { \t false를 반환합니다. } } return true; } – bikedres

+0

'자동차 경주'에서이 코드를 실행한다고 가정하면 코드가 'e'를 치기 전에 코드가 공백을 치게됩니다. 따라서 else로 이동하고 'e'를 ''와 일치시키고 false를 반환합니다. 'r acecar'에서 코드를 실행하면 true를 반환합니다. 공간이 문자열의 중간 지점보다 앞에있는 한 계속 작동합니다. 제 조언은 회문을 확인하기 전에 공백을 제거하는 것입니다. 또한 일반적으로 배열을 반복하는 루프 내부에서 (항목을 제거하여) 배열의 길이를 수정하는 것은 좋지 않은 생각이었습니다. –

1

그냥 공백없이 문자열을 체크하십시오. 당신이 공백을 무시하려면, 단지 공간의 모든 인스턴스를 제거합니다

let word = 'race car'; 

let isPalindrome = (word) => { 
    let nospaces = word.replace(/\s/g, ''); 
    return [...nospaces].reverse().join('') === nospaces; 
} 

또는 비 ES6

을 :

var word = 'race car'; 

var isPalindrome = function(word) { 
    var nospaces = word.replace(/\s/g, ''); 
    return nospaces.split('').reverse().join('') === nospaces; 
} 
1

그냥 배열로 분할하기가 훨씬 쉬워 보인다 반전과 단어가 회문인지 확인하기 위해 다시 가입 :

관련 문제