안녕하세요.
이번 시리즈에서는 Codewars의 도전 과제와 저의 사고 과정을 포스팅하고 있습니다. 가능할 때마다 JS와 Node 18을 사용하고 있습니다. 명확성을 위해 공정하게 사용하고 있습니다.
좋아요, 맛있었어요. 본질적으로 문자열에서 중복된 항목을 제거하고 남은 항목을 순서대로 정렬한 다음 두 문자열을 결합해야 합니다. 정확히 그 순서는 아닙니다. 사실 저는 정반대의 방법으로 했어요. 그리고 매우 구체적인 단계(중복 제거)를 위한 유틸리티 기능도 구축했습니다.
먼저 두 문자열을 연결합니다. 쉽습니다:
let longest = s1 + s2;
두 번째로 글자를 나누세요.
let array = new Array(s1.length + s2.length); for (let i = 0 ; i < s1.length + s2.length ; i++ ){ array[i] = longest[i]; }
셋째, 문자 정렬:
array = array.sort((a, b) => a.localeCompare(b)); // (a, b) => a.localeCompare(b) THIS IS REDUNDANT, but I leave it as a reminder
넷째, 중복 제거:
function keepFirstLetter(array){ let arrayFixed = new Array(array.length); let counter = 0; arrayFixed[0] = array[0]; for (let i = 0 ; i < array.length ; i++ ){ if (arrayFixed[counter] != array[i]){ counter++; arrayFixed[counter] = array[i]; } } return arrayFixed; }
다섯째, 정리:
array = array.join("");
마지막으로 퍼즐의 모든 조각을 하나로 모으세요.
function longest(s1, s2) { let array = new Array(s1.length + s2.length); let longest = s1 + s2; for (let i = 0 ; i < s1.length + s2.length ; i++ ){ array[i] = longest[i]; } array = array.sort((a, b) => a.localeCompare(b)); array = keepFirstLetter(array); array = array.join("") return array; } function keepFirstLetter(array){ let arrayFixed = new Array(array.length); let counter = 0; arrayFixed[0] = array[0]; for (let i = 0 ; i < array.length ; i++ ){ if (arrayFixed[counter] != array[i]){ counter++; arrayFixed[counter] = array[i]; } } return arrayFixed; }
확실히 성능이 좋지 않습니다. 나는 두 번째 루프를 좋아하지 않습니다. 그리고 그다지 깨끗하지도 않습니다. 언젠가 이 글을 다시 찾아봐야겠습니다.
잘 지내세요. 물을 마셔요???.
이전
위 내용은 코드워즈 - 2대1의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!