2017-01-09 4 views
0

이 해밍 거리 문제를 해결하기 위해 노력하고 있습니다. 현재 '0'을 만나지 않는 while 루프가 붙어 있습니다. 두 문자열 사이의 가장 긴 길이 (minLength). shortestString 결과를 "001"로 만들고 싶지만 지금은 "01"을하고 있습니다. 도움을 주시기 바랍니다, 미리 감사드립니다.해밍 거리에서 작업 - 두 문자열을 가장 긴 문자열의 길이와 일치 시키려면 0을 추가해야합니다.

VAR의 함수 해밍 거리 = (X, Y) {

VAR yString = y.toString (2); var xString = x.toString (2);

if(xString.length > yString.length){ 
    var minLength = xString.length; 
    var shortestString = yString; 
    var longestString = xString; 
} 
else{ 
    minLength = yString.length; 
    shortestString = xString; 
    longestString = yString; 
} 

while(shortestString.length < minLength){ 
    newString = '0' + shortestString; 
    shortestString++; 
    return newString; 
} 
console.log(newString); 

}}; hammingDistance (1, 4);

답변

0

while 루프에서 shortestString++;을 없애면 제대로 작동합니다.

해당 변수는 문자열이므로 증가 시키면 모든 종류의 손상을 초래할 수 있습니다. 근본적으로 '0'을 추가 할 때 어쨌든 그것을 증가시키고 있으며, while 조건에서 길이를 확인하고 있습니다.

return newstring을 잠시 밖으로 이동해야합니다. while 루프는 첫 번째 패스에서 복귀가 중단되면 실행됩니다.

+0

감사합니다 @allnodcoms 이것은 leetcode를 통해 이루어지며, 다음은 나에게 '시간 초과 한계'오류를 제공합니다. jsbin이 나에게 '잘못된 return 문'오류를 표시합니다. while (shortestString.length gmatsushima

+0

OK, 새로운 접근법 ... 가장 긴 문자열 (Math.max 등)의 길이를 찾아 가장 짧은 문자열의 길이를 뺍니다. 이것은 필요한 패드 스트링의 길이를 제공합니다. 0의 배열을 만들고 배열을 빈 문자열을 구분 기호로 결합한 다음 가장 짧은 문자열을 끝에 추가하십시오. – allnodcoms

+0

다음과 같이 작업 한 @allnodcoms에 감사드립니다 .. str = shortestString.length ; wantedLength = longestString.length; while (str <의도 길이) { zerosArray.push (0); newString = zerosArray.join ('') + shortestString; str ++; } console.log ('newString', newString); return newString;' – gmatsushima