replit code kata 3일차
문제
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
나의 풀이
function getLengthOfStr(s) {
let strArr = [];
let prevStrArr = [];
for (let i = 0; i < s.length; i++) {
let ss = s.slice(i, i+1);
//console.log(ss);
//console.log(i);
// console.log(strArr);
// console.log(prevStrArr);
for (let j = 0; j < strArr.length; j++) {
console.log(j);
if (ss === strArr[j]) {
if (prevStrArr.length < strArr.length) {
prevStrArr = strArr.slice();
console.log(strArr[j]);
console.log(prevStrArr);
console.log(ss);
}
strArr = strArr.splice(j+1, strArr.length);
//console.log(strArr);
//console.log(prevStrArr);
break;
}
}
strArr.push(ss);
//console.log(strArr);
//console.log(prevStrArr);
}
return Math.max(strArr.length, prevStrArr.length);
}
풀이
- 체크하는 문자열이 저장될 배열(strArr)와 중복된 문자열을 찾았을 경우 그 전까지의 문자열을 기록할 배열(preStrArr)를 생성한다.
- 주어진 문자열의 문자를 하나씩 돌면서 체크를 한다. 중복 되지 않은 문자열의 경우 strArr에 저장한다.
- 중복되는 문자를 찾을 경우, 그 문자 전까지를 preStrArr에 저장한 후, 현재까지 체크된 문자열인 strArr에서 첫번째 문자 부터 중복문자의 앞쪽 문자까지를 잘라낸다.
- 이후 다음 문자부터 다시 2~3번을 반복한다.
- 이후에 또 다시 중복되는 문자를 발견했을 경우, 그 때까지의 문자열의 길이와 그 전에 발견된 중복되지 않은 문자열(preStrArr에 담겨있는)의 길이를 비교한다. 비교했을 때, 새로 발견된 문자열이 더 길 경우 preStrArr를 교체하고, 그렇지 않으면 교체하지 않는다.
- 5번까지의 프로세스를 반복 했을 경우, preStrArr에는 찾아낸 중복되지 않은 문자열 중 가장 긴 것이 저장되어 있을 것이고, strArr에는 나머지 문자(당연히 중복되지 않은)들이 담겨 있을 것이다. 마지막으로 그 둘을 비교하여, 더 긴 것을 리턴한다.
Author And Source
이 문제에 관하여(replit code kata 3일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qqbck123/replit-code-kata-3일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)