String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
const getLengthOfStr = str => {
let newStr = "";
let maxArr = [0];
for (i = 0; i < str.length; i++) {
if (newStr.indexOf(str[i]) === -1) {
newStr = newStr + str[i];
if (i === str.length - 1) {
maxArr.push(newStr.length);
}
} else {
maxArr.push(newStr.length);
newStr = newStr.slice(newStr.indexOf(str[i])+1) + str[i]
}
}
return Math.max(...maxArr)
}
newStr
과 배열 newArr
를 선언한다. for
안에서 str의 글자 하나하나를 index 로 접근해서indexOf
(str[i]) === -1 이면) newStr과 str[i]를 결합한다.push
한다.newStr.indexOf
로 newStr 안 중복되는 str[i]의 위치를 찾아 처음부터 중복알파벳 까지는 삭제하고 중복알파벳 뒤쪽만 남기도록 한다.push
한다.Math.max
와 펼침 연산자
를 사용해 return 한다.- 로직대로 알단 코드를 작성해보고 테스트 모듈을 run 했을 때 통과하지 못하는 경우를 하나씩 제거해가면서 코드를 수정했는데 마지막까지 case 하나를 통과하지 못했다. 시간이 나면 다시 고민해봐야겠다.
newStr = str[i]
로 초기화 하고 다음 반복으로 넘어가면 된다고 생각했는데, 그러면 abcdecfop 같은 문자열에서는 abcde / cfop 로 나누어 세게 되어서 오류가 발생하고 있었다!newStr = newStr.slice(newStr.indexOf(str[i])+1) + str[i]
으로 변경했더니 모든 테스트 케이스를 통과하였다.