String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
const getLengthOfStr = str => {
let arry = [];
let newTxt = '';
if(str.length === 0) {
return 0;
}
for (let i in str) {
if(newTxt.includes(str[i])){
newTxt = newTxt.slice(newTxt.indexOf(str[i]) + 1);
}
newTxt = newTxt + str[i];
arry.push(newTxt.length);
}
return Math.max(...arry);
}
일단 빈 배열과 빈 문자열을 하나씩 만들어 둔다. 혹시나 들어오는 문자열의 길이가 0이라면 그대로 0을 반환하도록 해준다.
let arry = []; let newTxt = ''; if(str.length === 0) { return 0; }
들어오는 글자를 하나씩 빈 문자열(newTxt)에 추가 시키고 그 길이를 빈 배열(arry)에 추가한다.
newTxt = newTxt + str[i]; arry.push(newTxt.length);
하나씩 추가로 빈 문자열에 들어오다가 같은 문자가 들어온다면 그 문자열은 다시 빈 문자열로 초기화 되도록 해준다.
if(newTxt.includes(str[i])){ newTxt = newTxt.slice(newTxt.indexOf(str[i]) + 1); }
문자열의 길이만큼 다 돌았다면 마지막으로 문자열의 길이를 하나씩 저장해놨던 배열 중 가장 큰 수를 구한다.
return Math.max(...arry);
알고리즘도 창의력이 필요하다는 걸 느꼈다.
주어진 인자를 그대로 변환하는 것이 아닌 새로운 배열이나 새로운 문자열을 만들어 집어넣는 방법이 많이 보이는 것 같다. 잘 기억해야겠다.